Erros frequentes em C
As contribuições dos alunos para esta secção - "Erros frequentes e
boas práticas" - são benvindas. Envie um "email" para
acm@ncc.up.pt
com Subject = P.I.
.
Erros frequentes
Listamos de forma sumária alguns erros que se cometem frequentemente ao
programar em C. São por vezes difíceis de detectar e de resultados
surpreendentes e desastrosos...O leitor deve em cada caso pensar um pouco no
que o computador fará. Os erros sintácticos estão marcados com "%".
- Comparar duas expressões com = em vez de ==, exemplo:
if(i=1) printf("Erro!\n");
- Colocar ";" depois da condição de um if ou for;
Por exemplo, qual é o efeito das seguintes partes de programa?
if(i>=1); i=0;
while(k>0);{k--; printf("*");
- % Colocar "," em vez de ";" como separador das expressões
do for. Por exemplo
for(i=0,i<n,i
+)...;+
while(k>0);{k--; printf("*");
- Quando um programa termina anormalmente, digamos no ponto *, podem
não chegar a serem escritos os textos correspondentes a um ou mais
"printf's" anteriores a esse ponto! Exemplo (pára em *,
não é impresso Aqui):
...printf("Aqui");...*...
Solução: usar "fflush(stdout)" a seguir a cada "printf":
...printf("Aqui");fflush(stdout);...*...
- Quando um programa utiliza funções de uma biblioteca, deve ser compilado
de forma apropriada (ver o man do gcc). Por exemplo, se usa a função
sin(), deve incluir a linha
#include <math.h>
e ser compilado
da seguinte forma:
gcc -lm prog.c
- No printf o número de "especificações de formato" (...%...)
deve ser exactamente igual ao número de expressões a imprimir e a cada
expressão deve corresponder um formato compatível. A seguinte instrução tem 2
erros (supondo que i é int):
printf("a=%d b=%c\n",i,i+2,i+3);
- As expressões nos lados direiros dos define devem ser colocadas
entre parêntesis
#define LMAX (XMEDIO+2)
- Cuidado com os define; por exemplo
#define LMAX (XMEDIO+2);
está (provavelmente!) errado.
PC/PI - página reservada - versão 2005.02.08