![]() |
![]() |
![]() |
Antes de vermos as características finais da linguagem C vamos apontar os erros mais comuns cometidos pelos programadores.
=
) versus comparação (==
)()
na chamada de uma função
![]() |
=
) versus comparação (==
)Alguns dos erros descritos são cometidos com frequência pelos programadores que até aqui apenas estavam familiarizados com a linguagem Pascal.
Um erro comum e difícil de detetar provém do facto 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 correta 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á utilizar 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 */
...
![]() |
()
na chamada de uma funçãoQuando se está habituado a programar em Pascal é frequente o esquecimento dos parêntesis curvos na chamada de uma função sem argumentos. Em C, todas as chamadas a funções têm de incluir os parêntesis curvos:
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 sensíveis no C. As palavras-chave, têm de ser, por exemplo, escritas com caracteres minúsculos.
![]() |
;
termina as
instruções Todas as instruções deverão ser terminadas
com ;
, exceto a instrução
composta, ou seja o ;
é um
terminador e não um separador de instruções como acontece no Pascal.
O compilador deteta este erro.
![]() |