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.