Existe 2 tipos de erros em programa��o:
Os erros de compila��o ocorrem quando o programa que escrevemos n�o obedece �s regras da linguagem. Este tipo de erros s�o normalmente f�ceis de detectar. Os mais frequentes s�o:
Os erros de execu��o s�o mais subtis. O programa compila normalmente sem erros, mas ao ser executado n�o faz aquilo que estamos � espera que fa�a. Na g�ria inform�tica, denominamos este tipo de erros por bugs.
Muitos principiantes em programa��o ficam frustrados quando n�o conseguem detectar os bugs. Com a experi�ncia, v�o ver que come�am a detect�-los com rapidez. O importante � n�o entrarem em p�nico.
Para se detectar um bug, devem tentar isolar o erro. Isso pode ser feito utilizando printfs no meio do c�digo para ver o que � que o programa est� a fazer passo a passo. Em alternativa, existem programas especiais denominados de debuggers que permitem executar o programa passo a passo e ver o conteudo das vari�veis do programa.
De seguida, apresenta-se alguns bugs cl�ssicos que ocorrem em C. S�o cl�ssicos porque n�o existe nenhum programador de C que nunca os tenha feito. Tenho a certeza que mais tarde ou mais cedo todos v�s tamb�m v�o cometer (ou j� cometeram) estes erros.
Exemplo:
int i, soma; i = 1; while (i < 10) { soma = soma + i; i++; } ...
A vari�vel soma n�o est� inicializada.
Exemplo:
... printf("Introduza um n�mero: "); scanf("%d", x); ...
em vez de:
... printf("Introduza um n�mero: "); scanf("%d", &x); ...
Ditto.
Exemplo:
if( i = 3 ) { ... }
em vez de:
if( i == 3 ) { ... }
Um ciclo cuja condi��o de paragem nunca � verificada. Isto acontece muito quando nos esque�emos de actualizar um contador que controla a condi��o de paragem do ciclo. Exemplo:
i = 1; s = 0; v = 0; while( i <= 100 ) { s = s + i; v = v + i*i; } printf("%d %d\n", s, v);
Exemplo:
i = 1; s = 0; v = 0; while( i <= 100 ); { s = s + i; v = v + i*i; i++; } printf("%d %d\n", s, v);
O problema � o ponto-e-v�rgula a seguir ao while. O c�digo vai dar origem a um ciclo infinito visto que o corpo do while � a instru��o vazia. O programa anterior � equivalente a:
i = 1; s = 0; v = 0; while( i <= 100 ) ; s = s + i; v = v + i*i; i++; printf("%d %d\n", s, v);
Este erro � t�o frequente que alguns programadores acabam por adoptar outra regra nas chavetas:
i = 1; s = 0; v = 0; while( i <= 100 ) { s = s + i; v = v + i*i; i++; } printf("%d %d\n", s, v);
Assim, torna-se menos provavel que um programador coloque o ponto-e-v�rgula fora do s�tio. Visualmente, a chaveta a abrir d� uma indica��o que a instru��o while est� por completar.
O mesmo tipo de erro ocorre com a instru��o if e for. Exemplo:
if( i > 0 ); printf("ol�"); printf("At� logo!");
Para o compilador, este c�digo � equivalente a:
if( i > 0 ) ; printf("ol�"); printf("At� logo!");
Isto �, caso a condi��o (i>0) seja verdadeira, o computador ir� executar a instru��o vazia. As instru��es seguintes ser�o executadas incodicionalmente, quer a condi��o seja verdadeira quer seja falsa.
Exemplo:
if(...) instru��o1 instru��o2
Para o compilador, isto � equivalente a,
if(...) instru��o1 instru��o2
e provavelmente aquilo que queriam fazer era,
if(...) { instru��o1 instru��o2 }