Considerações gerais sobre a tarefa 1

Considerações gerais sobre a tarefa 1

por Rafael Schouery -
Número de respostas: 0
Olá a todos,
Estou terminando de corrigir as tarefas 1 e 2. Mas como muitos estão preocupados com o desempenho estou mandando algumas considerações gerais.
Compilem sempre com "-Wall -ansi -pedantic -O2" para encontrar warnings no seu programa. Como já comentei
antes no fórum, tarefas com warning perderam pontos (como é de costume no BCC). As tarefas de desafios
não perderam pontos porque sei como é maratona e que o código nem sempre é o melhor que poderiamos fazer.
Mas mesmo em maratona compilar com as opções acima é uma boa, já que detecta algumas coisas úteis.

Entre os warnings que encontrei vale notar alguns:
* suggest explicit braces to avoid ambiguous ‘else’
Se você usa Emacs ou Vim, ele indenta o código para você. Mas acostume-se a por braces nos ifs encadeados pois a ambiguidade é resolvida pelo compilador. Já amigos meus não passarem problemas por causa deste warning.

* control reaches end of non-void function
Isso ocorre por falta de um return. Pela minha experiência o que ocorre é que você declara a função para retornar um int e depois decide que ela não tem que retornar nada, mas esquece de atualizar a declaração da mesma.

* implicit declaration of function ‘paintAndCheck’
Isso ocorre porque você usa uma função que só é declarada depois. Isso é ruim para a legibilidade do código, exceto se o nome da função (ou um comentário) explicar o que a mesma faz. Caso queira que a declaração venha depois, ponha o protótipo antes.

* assignment makes integer from pointer without a cast
Cuidado ao usar ponteiros, normalmente este warning ocorre quando você passa um int ao invés de um ponteiro como deveria. Por exemplo,
scanf("%d",i); ao invés de scanf("%d",&i);

* unused variable ‘k’
Declarar uma váriavel que não é usada é ruim para o entendimento do código.

* ‘resposta’ may be used uninitialized in this function
Ocorre quando uma váriavel pode estar sendo lida sem antes ter sido escrita. Em geral o valor inicial da variável é um lixo qualquer, portanto tenha cuidado.

* ISO C90 forbids mixed declarations and code
Não misturar código e declaração é uma boa para tornar o programa mais legível.

* implicit declaration of function ‘malloc’ e incompatible implicit declaration of built-in function ‘malloc’
Estes dois ocorrem quando você esquece de por #include <stdlib.h>

OBS: Corrigi a parte do malloc, é stdlib e não stdio.