Baixe o app para aproveitar ainda mais
Prévia do material em texto
APOSTILA: LINGUAGENS DE PROGRAMAÇÃO C E C++ Angelo Passaro Página I.1 Segunda revisão / 2002 II.. EELLEEMMEENNTTOOSS DDAASS LLIINNGGUUAAGGEENNSS CC EE CC++++ I.A. Série de caracteres válidos I.A A seguir são apresentados o conjunto de caracteres que são aceitos nas linguagens C e C++. Observe-se, no entanto, que nem todos estes caracteres podem ser utilizados para a criação de identificadores (ver seção I.F), e alguns deles têm utilização especial (ver seções I.C, I.G, e I.H). letras A ... Z a ... z dígitos 0 a 9 caracter de sublinhado _ caracteres de espaço em branco são ignorados pelo compilador, a menos que sejam utilizados como separadores de constantes caracter (seção I.D.3) ou identificadores (seção I.F). Os seguintes caracteres são considerados espaços em branco: espaço em branco, tab, “carriage-return” (CR), “formfeed”, tab vertical e “newline”. Comentários são tratados como caracteres de espaço em branco (ver seção I.G)I.G. caracteres especiais têm significado especial em C e C++ (tabela I.1) e serão discutidos oportunamente. Muitos desses caracteres especiais têm vários usos (exemplos na tabela I.9). O compilador determina o uso a partir do contexto em que são utilizados. Tabela I.1 : Caracteres especiais vírgula , maior que > ponto . exclamação ! ponto e vírgula ; barra simples | dois pontos : barra / interrogação ? barra reversa \ apóstrofe ‘ til ~ aspas “ soma + abre parenteses ( cardinal # fecha parenteses ) percentagem % abre colchete [ e comercial & fecha colchete ] circunflexo ^ abre chave { asterisco * fecha chave } menos - menor que < igual = APOSTILA: LINGUAGENS DE PROGRAMAÇÃO C E C++ Angelo Passaro Página I.2 Segunda revisão / 2002 I.B. Tipos de Dados I.B.1. Tipos Intrínsecos I.B.1 Os tipos de dados intrínsecos das linguagens C e C++ são os mesmos da maioria das linguagens algorítmicas. As palavras chave utilizadas por estas linguagens para os tipos intrínsecos são apresentadas na tabela a seguir. Tabela I.2 : Tipos de dados intrínsecos Inteiro int Real float real de dupla precisão double Caracter char void void Observação : Na realidade, o tipo caracter (char) é um tipo de variável inteira. Observação: Em C não é definido o tipo intrínseco string (conjunto de caracteres que formam uma palavra ou frase). Para a construção de uma palavra ou frase em C deve ser utilizado um vetor de caracteres com um caracter de terminação obrigatório ( \0 - consulte as seções I.C e I.D.4). Esse caracter é utilizado para identificar o final da string. Modificadores de tipo: São palavras reservadas que, utilizadas à frente dos tipos intrínsecos, alteram seus limites (tabela I.3). Tabela I.3 : Modificadores de tipo unsigned o tipo a seguir deve ser considerado sem sinal. exemplo: unsigned int a; signed o tipo a seguir deve ser considerado com sinal (comportamento padrão) exemplo : signed int é equivalente a int short indica que o inteiro deve ser de 2 bytes long utilizado à frente do especificador de tipo int indica que um inteiro deve ocupar 4 bytes. Utilizado à frente do especificador de tipo double indica que uma variável real deve ocupar mais de 8 bytes (depende de implementação do compilador). Tabela I.4 : Tipos fundamentais de inteiros tipo tamanho em bytes valores máximos e mínimos char 1 -128 a 127 unsigned char 1 0 a 255 short int 2 -32768 a 32767 unsigned short int 2 0 a 65535 int 2 ou 4 (depende de implementação) APOSTILA: LINGUAGENS DE PROGRAMAÇÃO C E C++ Angelo Passaro Página I.3 Segunda revisão / 2002 long int 4 ou 8 para 4 bytes: -2147483648 a 2147483647 unsigned long int 4 ou 8 para 4 bytes : 0 a 4294967295 Tabela I.5 : Tipos fundamentais de números reais tipo tamanho em bytes expoentes mínimos e máximos menor valor positivo float 4 -37 e 38 1.17549435E-38 double 8 -307 e 308 2.2250738585072014E-308 long double 12 ou 16 (depende de implementação) para 12 bytes -4931 e 4932 Observação: Valores limites de cada tipo são apresentados nos arquivos de cabeçalho denominados limits.h e float.h). I.B.2. Tipos derivados São tipos construídos pelos usuários a partir dos tipos fundamentais. São exemplos de tipos derivados: • vetores de objetos de um tipo determinado; • classes; • estruturas; • unions; • ponteiros para objetos ou funções. Tipos de dados derivados serão tratados oportunamente, durante o decorrer do curso. I.B.3. Modificador CONST A palavra chave const pode ser utilizada tanto para as declarações de variáveis e objetos como para declaração de funções. Veja as sintaxes a seguir Sintaxe para varáveis e objetos: const tipo identificador; tipo pode ser qualquer um dos tipos intrínsecos definidos no capítulo I, subseção B (I.B), ou tipos derivados (tais como, ponteiros, structs e classes). Exemplos: const int var = 5; const double PI = 3.14159265; APOSTILA: LINGUAGENS DE PROGRAMAÇÃO C E C++ Angelo Passaro Página I.4 Segunda revisão / 2002 Quando const é usado numa declaração de variáveis ou objetos, ela especifica que o objeto não é modificável, ou seja, o valor atribuído à variável, ou os atributos de um objeto não podem ser modificados (são constantes) durante a execução do programa. Na linguagem C++ a palavra chave const pode ser usada para definir um valor constante, ao invés da diretiva de pré-processamento #define (ver capitulo II). A vantagem de se usar variáveis declaradas constantes ao invés da constantes definidas por diretivas é que os valores podem ser verificados quanto ao tipo de dado durante a compilação e estes podem ser utilizados no lugar de expressões constantes. Uma das vantagens do uso de variáveis declaradas constantes é que é possível definir um ponteiro para essa variável, e esse ponteiro pode ser utilizado como parâmetro de uma função. Esse procedimento, em princípio, evita que uma função modifique, acidentalmente, o parâmetro passado por referência. O modificador pode ser utilizado também na declaração de funções membro (classes), seguindo a lista de parâmetros. Neste caso, essa palavra chave indica que a a função não modifica o objeto pela qual ela foi invocada. Maiores informações sobre este tópico serão dados na seções que envolvem estruturas específicas para programação orientada o objetos em C++. I.B.4. typedef É uma instrução do C e do C++ (palavra reservada) que permite definir um novo tipo de dado. Este novo tipo se comporta, no que diz respeito à programação, de forma similar a um tipo intrínseco da linguagem (seção I.B.1). A sintaxe é: typedef tipo novo_tipo;. Exemplo: typedef unsigned char byte; neste exemplo, byte passa a ser um sinônimo de unsigned char. Uma variável declarada como sendo do tipo char pode assumir os valores de –128 a 127, enquanto uma variável do tipo byte assume valores na faixa 0 a 255. I.C. Seqüências de “Escape” I.C São combinações de caracteres que representam um único caracter, incluíndo caracteres não gráficos. Uma seqüência de “escape” consiste de uma barra reversa ( \ ) seguida de uma letra ou combinação de dígitos, conforme apresentado na tabela I.6. APOSTILA: LINGUAGENS DE PROGRAMAÇÃO C E C++ Angelo Passaro Página I.5 Segunda revisão / 2002 Tabela I.6 : Seqüências de “escape” definidas pelo padrãoANSI \n nova linha \t tabulação horizontal \v tabulação vertical * \f alimentação de formulário * \b retrocesso \r carriage return \a sino \’ apóstrofe \” aspas \? ponto de interrogação \\ barra reversa \ddd caracter ASCII em notação octal ** \xddd caracter ASCII em notação hexadecimal ** \0 NULL (finalizador de string, correspondem à barra reversa seguida do númeral zero) * afetam a impressão e não o display ** ddd indica a possibilidade de uso de até 3 caracteres Uma barra reversa seguida de um caracter “newline” (ou seja, tecla RETURN) é interpretado como um caracter de continuação, o que permite separar em duas ou mais linhas instruções muito longas. O padrão ANSI reserva as seqüências de “escape” de letras minúsculas. Se for utilizada uma letra que não esteja incluída na tabela I.6, a barra reversa é ignorada e o caracter é representado. Mudanças no padrão podem incluir novas seqüências, de forma que este tipo de prática não é recomendada para a impressão de caracteres simples. Para exemplos do uso de seqüências de “escape” consulte a seção I.D.4. I.D. Constantes Constantes são “valores” colocados explicitamente no programa. Na linguagem C existem 4 tipos de constantes, apresentados a seguir. I.D.1. Constantes inteiras (decimal, octal ou hexadecimal) São consideradas constantes inteiras os valores do tipo short int, long int, unsigned int, etc. Exemplos de constantes inteiras são: 132 0204 (octal) 0x84 (hexadecimal) 0X84 (hexa) 32179 0766663 0x7Db3 I.D.2. Constantes de ponto flutuante APOSTILA: LINGUAGENS DE PROGRAMAÇÃO C E C++ Angelo Passaro Página I.6 Segunda revisão / 2002 A sintaxe geral destas constantes é: [sinal][digitos].[digitos][E][sinal][digitos], onde os valores entre colchetes são opcionais (nem todos são opcionais ao mesmo tempo). Todas as constantes de ponto flutuante são tratadas como do tipo double. Exemplos: 0.75 .75 75e-2 75E-2 .0075e2 I.D.3. Constantes caracter I.D.3 Todas as constantes caracter são do tipo inteiro (decimal, octal ou hexadecimal) e sua sintaxe é: ‘caracter’, onde o caracter pode ser qualquer símbolo da tabela ASCII ou uma seqüência de “escape” (ver seções I.C e I.D.4). As constantes caracter devem ser colocadas entre apóstrofes. Exemplos: ‘a’ ‘Z’ ‘\a’ ‘\”’ I.D.4. Constante literal (“String Literals”) I.D.4 É uma seqüência de caracteres “permitidos” (seções I.A e I.C) delimitada por aspas. Exemplos: “Esta é uma string literal” “\nEsta é uma \”string literal\” com uma seqüência de \”escape\” de nova linha como primeiro caracter e duas de aspas envolvendo a palavra escape” printf(“\n o valor de x é : %d”, x); O padrão ANSI C define que devem ser permitidos até 509 caracteres numa “string literal” (Não esquecer que o último caracter deve ser um NULL, ou seja ‘\0’). Observação: Uma “string literal” deve terminar sempre (na memória) com um caracter nulo (NULL), representado pela seqüência de “escape” ‘\0’. Como conseqüência, uma “string literal” é um vetor de caracteres com dimensão igual ao número de caracteres + 1 (ou seja, o NULL). Observação: O uso de uma seqüência de “escape” em notação octal ou hexadecimal para impressão de um caracter no meio de uma string exige, por segurança, a utilização de 3 dígitos. Considere o exemplo a seguir: “\x07BELL” seria impresso como: APOSTILA: LINGUAGENS DE PROGRAMAÇÃO C E C++ Angelo Passaro Página I.7 Segunda revisão / 2002 {ELL, uma vez que 07B é o código hexadecimal do caracter ASCII {. Para que o sinal sonoro seja acionado, com a impressão da palabra BELL, deve-se escrever: “\x007BELL”, garantindo que após \x os três próximos caracteres sejam utilizados corretamente na seqüência. I.E. Palavras reservadas As palavras apresentadas nas tabelas I.7 (para o C e o C++) e I.8 (somente para o C++) são reservadas para uso como palavras-chave e não podem ser utilizadas com outra finalidade. Tabela I.7 : Palavras reservadas do C auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if static while Tabela I.8 : Palavras reservadas adicionais do C++: asm friend private this catch inline protected throw class new public try delete operator template virtual I.F. Identificadores I.F Um identificador é uma seqüência de caracteres válidos, iniciados por uma letra (maiúscula ou minúscula) ou um caracter de sublinhado, delimitado por espaços em branco. Não são permitidos identificadores iniciados por dígitos. Os identificadores correspondem aos nomes de objetos, variáveis, classes, tipos, funções e rótulos (labels). Observações: 1. padrão ANSI C permite até 31 caracteres válidos para a definição de um identificador. No entanto, cada fabricante pode implementar um número diferente de caracteres permitidos (sempre maior que o definido pelo padrão). A documentação fornecida pelo fabricante do produto de desenvolvimento deve ser consultada, mas o usuário deve evitar o uso de identificadores com número maior de caracteres para garantir portabilidade dos fontes. APOSTILA: LINGUAGENS DE PROGRAMAÇÃO C E C++ Angelo Passaro Página I.8 Segunda revisão / 2002 2. Os desenvolvedores (ou usuários) devem evitar a definição de identificadores que iniciam com um único sublinhado, uma vez que as implementações de C reservam esses identificadores para seu próprio uso. 3. O padrão C++ não impõem restrições quanto ao número de caracteres utilizados na definição de um identificador, no entanto, os compiladores, em geral, o fazem. Nestes casos deve-se verificar a documentação fornecida pelo fabricante de seu produto de desenvolvimento. 4. Os desenvolvedores devem evitar a definição de identificadores que iniciam com um duplo sublinhado ( __ ), pois estes são reservados para uso por implementações de C++ e bibliotecas padrão. 5. Palavras reservadas pela linguagem não podem ser utilizados como identificadores dos usuários (desenvolvedores). I.G. Comentários I.G Comentários são considerados espaços em branco pelo compilador (seção I.A). Eles são utilizados para documentar os programas no próprio código fonte ou para a eliminação de trechos de códigos sem que seja necessário apagá-los, visando a realização de testes de implementação. Em C, um trecho de código comentado é delimitado pelas seguintes seqüências de símbolos /* e */, colocados no início e no fim do trecho, respectivamente. Todo o conteúdo localizado entre esses símbolos, incluindo caracteres de “newline” e instruções da linguagem, é considerado espaço em branco. Em C++ estas seqüências de caracteres são também aceitas para definir comentários, ou seja, o estilo de comentários do C é reconhecido. Contudo, esta linguagem define uma nova seqüência de caracteres para comentários, a dupla barra normal (//). O funcionamento deste comentário também é diferente. Todo o conteúdo que segue a seqüência de dupla barra normal, até o final da linha, é considerado um comentário. Desta forma, se o desenvolvedor pretende comentar todo um conjunto de linhas em seqüência, todas elas devem ser iniciadas com a seqüência de duas barras. Exemplos de estilos de comentários: /* Este é um comentário no estilo C, que contem mais de uma linha. Note que foi utilizado somente o delimitador de inicio de comentario na primeira linha e de final de comentário ao final desta linha. */ // Este é um comentário no estilo C++, // com mais de umalinha. Note que aqui é necessário colocar a dupla barra normal // no inicio de cada linha I.H. Pontuadores I.H Pontuadores são alguns dos caracteres especiais (tabela I.1, seção I.A) que têm um significado especial em C e C++. Os pontuadores são apresentados na tabela I.9. Tabela I.9 : Pontuadores Símbolos usos exemplos APOSTILA: LINGUAGENS DE PROGRAMAÇÃO C E C++ Angelo Passaro Página I.9 Segunda revisão / 2002 [ ] dimensionamento de vetores de qualquer tipo; pode ser utilizado em operadores em C++; // declara string de 20 caracteres char uma_string [20]; // declara um vetor de doubles com 50 componentes double um_vetor[50]; { } delimita blocos (ou seja, funções, instruções em laços, instruções em estruturas condicionais, definição de classes, etc) (seção II.B). // função int function (void) { // aqui inicia o bloco de instruções da função ... conjunto de instruções ... } // fim do bloco da função // laço do tipo do.....while do { // aqui inicia o bloco de instruções do laço do ... conjunto de instruções ... } while (i <1000); // fim do bloco de instruções do // laço ( ) delimita parâmetros para estruturas condicionais, laços; pode ser utilizado em operadores em C++; // parâmetros e estruturas condicionais if ( a > b) maior = a; switch ( retorno ) ... //parâmetros de laços for ( i = 0; i < 1000; i ++); while (i < 1000) { ...conjunto de instruções ...} ; utilizado como delimitador de instrução após cada instrução em C e C++; não precisa ser utilizado para delimitar blocos, com exceção da definição de classes; // delimitação de instruções int a = 10, b = 20, c; c = a + b; # utilizado somente em diretivas de pré- compilação; # define A 1000 # include <iostream> # if defined A ... instruções ... # endif
Compartilhar