Как включить предупреждение «управление достигает конца не пустой функции» для main (), gcc 4.3 - PullRequest
0 голосов
/ 21 сентября 2011

Я использую 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, но он не был просвещен.

1 Ответ

4 голосов
/ 21 сентября 2011

Возвращаемое значение 0 неявно добавляется для main в C99 и C ++. Стандарт по умолчанию (gnu90), вероятно, также делает это.

Да, если вы соберете gcc -Wall -Wextra -std = c89 без возврата в main, вы получите предупреждение.

...