# 9.3. Avisos de Compilador

De seguida iremos ver uma descrição sobre as opções de avisos do compilador que podem ser definidas na página 3 do diálogo de opções do projecto. As explicações foram tiradas da página do manual para o GCC, egcs versão 1.1.1. Os avisos em si são mensagens de diagnóstico que indicam construções que podem causar erros.

-Wall

  Opções `-W' standard combinadas.

-W

  Compilar com -W. Esta opção define opções não incluidas no -Wall que são muito específicas. Por favor leia a informação GCC para mais informações.

-Wtraditional

  Avisa sobre algumas construções que se comportam de forma diferente no C tradicional e ANSI.

-Wundef

  Avisa de um identificador não definido é avaliado numa directiva `&#;if'.

-Wshadow

  Avisa sempre que uma variável local encobre outra variável local.

-Wid-clash-LEN

  Avisa sempre que dois identificadores distintos coincidem nos primeiros len caracteres. Isto pode ajudá-lo a preparar um programa que irá compilar com alguns compiladores obsoletos e com lesões cerebrais.

-Wlarger-then-LEN

  Avisa sempre que um objecto maior que LEN bytes é definido.

-Wpointer-arith

  Avisa sobre tudo o que dependa do «size of» de um tipo de função ou de void. O GNU C atribui a estes tipos um tamanho de 1, por conveniencia nos cálculos com ponteiros void * e ponteiros para funções.

-Wbad-function-cast

  Avisa sempre que uma chamada a uma função é feita para um tipo não coincidente. Por exemplo, avisa se `int malloc()` é feito sobre `qualquer&_;coisa *.`

-Wcast-equal

  Avisa sempre que um ponteiro for feito de forma a remover um qualificador de tipo do tipo do alvo. Por exemplo, avisa se um const char * é feito sobre um char * normal.

-Wcast-align

  Avisa sempre que um ponteiro é feito de tal modo que o alinhamento requerido do alvo é aumentado. Por exemplo, avisa se um char * é feito sobre um int * em máquinas em que inteiros apenas podem ser acedidos em fronteiras de dois ou quatro byte.

-Wwrite-strings

  Dá às constantes string o tipo const char&[;tamanho] de forma a que copiar o endereço de uma para um ponteiro char * não-const dará um aviso. Estes avisos ajuda-lo-ão a encontrar na hora da compilação código que pode tentar escrever numa constante string, Mas apenas se você tiver sido muito cuidadoso na utilização de const em declarações e protótipos. Caso contrário, será apenas uma nuisance; é por esta razão que não fizemos o `-Wall' pedir estes avisos.

-Wconversion

  Avisa se um protótipo causar uma conversão de tipo que é diferente da que aconteceria ao mesmo argumento na ausência de um protótipo. Isto inclui conversões de virgula fixa para flutuante e vice versa, e conversões que alteram o tamanho ou signedness (poder ser negativo ou ser sempre valor absoluto) de um argumento de vírgula fixa excepto quando é o mesmo que a promoção por defeito.

-Wsign-compare

  Avisa quando uma comparação entre valores signed e unsigned pode produzir um resultado incorrecto quando o valor signed é convertido para unsigned.

-Waggregate-return

  Avisa se qualquer função retornar estruturas ou uniões definidas ou chamadas. (Em linguagens em que pode retornar uma matriz (array), isto também levanta um aviso.)

-Wmissing-prototypes

  Avisa se uma função global é definida sem a prévia declaração de protótipo. Este aviso é levantado mesmo se a definição em si disponibiliza um protótipo. O objectivo é detectar funções globais que não são declaradas em ficheiros header.

-Wmissing-declarations

  Avisa se uma função global é definida sem a declaração prévia. Faz isto mesmo se a definição em si disponibiliza um protótipo. Utilize esta opção para detectar funções globais que não são declaradas em ficheiros header.

-Wredundant-decls

  Avisa se algo for declarado mais de uma vez no mesmo âmbito, mesmo em casos em que a declaração múltipla é válida e não altera nada.

-Wnested-externs

  Avisa se uma declaração externa é encontrada dentro de uma função.

-Winline

  Avisa se uma função não pode ser inlined, e ou foi declarada como inline, ou então a opção -fin*line-functions foi dada.

-Wold-style-cast

  Avisa se uma chamada (cast) de tipo antigo (C-style) é utilizada dentro do programa

-Woverloaded-virtual

  (apenas C++.) Numa classe derivada, as definições de funções virtuais têm de coincidir com o tipo de signature de uma função virtual declarada na classe base. Utilize esta opção para pedir avisos quando uma classe derivada declara uma função que possa ser uma tentativa errada para definir uma função virtual: isto é, avisa quando uma função com o mesmo nome que uma função virtual na classe base, mas com um tipo de signature que não coincide com o de nenhuma função virtual da classe base.

-Wsynth

  Avisa quando o comportamento de síntese do g++ não coincide com o do cfront.

torna todos os avisos em erros

  (-Werror) Trata os avisos como erros; aborta a compilação após quaisquer avisos.

Para uma distribuição do seu projecto, é recomendado que active -Wall.