Я использую gcc -O -Wall -Wextra
, чтобы помочь учащимся найти ошибки в их коде.Вообразите мое удивление, когда этот код, который никогда не возвращает значение из main()
, проходит без предупреждения:
int main(int argc, char* argv[]){
if(argc > 2)
fprintf(stderr, "Too many arguments\n");
else if(argc == 2){
FILE* file = fopen(argv[1], "r");
if(file != NULL)
doSomethingNifty(file);
else
fprintf(stderr, "File unable to be opened\n");
}
else{
soSomethingNifty(stdin);
}
}
Попробовав все остальное, что я могу придумать, я наконец попытался изменить имя от функции.Если я назову это maim
, я получу то, что ожидаю:
mumble.c: In function 'maim':
mumble.c:45: error: control reaches end of non-void function
Очевидно, наши хорошие друзья из Фонда свободного программного обеспечения в Комитете по стандартам C99 считают, что мои студенты нехочу быть предупрежденным о потенциальных ошибках в main()
, но только в других функциях.Итак, мой вопрос: как мне включить это предупреждение для main()
?
У меня RTFM, но он не был просвещен.