Antes de vermos as características finais da linguagem C
vamos apontar os erros mais comuns cometidos pelos programadores
principiantes. Alguns dos erros descritos são cometidos muito
comummente pelos programadores que até aqui apenas estavam
familiarizados com a linguagem Pascal.
Um erro comum e difícil de detectar provém do fato de uma atribuição ser considerada uma expressão em C e além disso qualquer expressão ter um valor lógico (TRUE ou FALSE). Assim a seguinte instrução é sintaticamente correcta mas frequentemente não é isso o que o programador pretende:
if (a = b) { ... };
Na instrução de cima o valor de b é atribuído a a e o if é avaliado como verdadeiro se esse valor for diferente de 0. O que geralmente se pretende numa instrução como aquela será comparar o valor de a com o valor de b:
if (a == b) { ... };
Certas funções são escritas esperando um apontador em alguns dos seus argumentos, como vimos no capítulo anterior. É frequente o programador esquecer-se de fazer corresponder a esses argumentos um endereço. Se esses argumentos forem apontadores para qualquer tipo, exceto arrays, o programador deverá usar o operador &, que fornece o endereço de uma variável. Exemplo:
int k;
struct coord p1;
float f[100];
void fn1(int *i, struct coord *p,
float *ar)
{ ... }
...
fn1(&k, &p1,
f); /* chamada à
função fn1() - notar a passagem de um array */
...
Quando se está habituado a programar em Pascal é frequente o esquecimento dos parêntesis na chamada de uma função sem argumentos. Em C, todas as chamadas a funções têm de incluir os parêntesis:
void fn2(void)
{ ... }
...
fn2( ); /*
chamada à função fn2() */
...
Não esquecer que em C os arrays multidimensionais se declaram e usam sempre com as dimensões separadas:
[][]... para arrays multidimensionais.
Além disso um array declarado com n elementos em qualquer das
suas dimensões tem índices que se situam sempre entre 0
e n-1.
Não esquecer a grande identidade entre arrays e apontadores,
mas também algumas diferenças já discutidas no capítulo
anterior. É de notar que é comum tratar as strings como
apontadores para char (na realidade são arrays de char).
Os caracteres minúsculos e maiúsculos são diferentes no C,
ao contrário do que sucede noutras linguagens. Nomeadamente as
palavras chave têm de ser escritas com caracteres minúsculos.
Todas as instruções deverão ser terminadas com ;, excepto a instrução
composta, ou seja o ; é um
terminador e não um separador de instruções como acontece no
Pascal. No entanto, o compilador detecta facilmente este erro.
[REV 08/1998]