Para aqueles que podem tropeçar nessa questão, como eu acabei de fazer:
Isso me deixa com o seguinte "ERRO em falta de protótipos":
cc -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -c -o conf.o conf.c
cc -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -c -o zconf.tab.o zconf.tab.c
cc conf.o zconf.tab.o -o conf
Estas linhas não são realmente erros. O comando make
executa vários outros comandos, conforme especificado em um arquivo chamado Makefile
. Por padrão, make
gravará esses comandos no terminal antes de executá-los. Por exemplo, se Makefile
disser para executar foo
, em seguida, bar
, em seguida, baz
, o make gravará foo
para o terminal e, em seguida, executará o comando foo
; em seguida, ele gravará bar
no terminal e executará bar
; Em seguida, ele gravará baz
no terminal e executará baz
.
Nesse caso, essas cc
lines são comandos que make
recebeu para executar Makefile
. O comando cc
executará o compilador C do sistema , que provavelmente é GCC . As coisas que começam com -
são opções , que afetam o comportamento do compilador C.
Para compiladores como o GCC, as opções que começam com -W
dizem ao compilador para distribuir avisos quando ele vê código que é tecnicamente válido, mas é frequentemente uma má ideia (por exemplo, algum padrão no código que muitos programadores pensam irá agir de alguma forma, mas irá realmente agir em outro).
Nesse caso, -Wall
ativa muitos (não todos!) avisos do GCC. -Wmissing-prototypes
e -Wstrict-prototypes
ativam avisos extras para identificar problemas relacionados ao recurso de protótipo de função do C .
Portanto, essas mensagens estão realmente nos dizendo que o comando cc
está prestes a ser executado e que (entre outras coisas) ele deve nos avisar se achar que o código está desonesto; em particular, se protótipos de funções estão sendo mal utilizados.
Os avisos do GCC são parecidos com isto:
main.c: In function ‘main’:
main.c:1:5: warning: traditional C rejects ISO C style function definitions [-Wtraditional]
int main(int argc, char **argv) {
^
Como nada disso aparece na sua saída, nenhum aviso ou erro ocorreu; mesmo com essas verificações extras em -W
habilitadas.