С вопросом: без предупреждения? - PullRequest
2 голосов
/ 01 апреля 2010
main()
{
  printf("Hello World.");
}

Почему в компиляторе gcc не выдается предупреждение, хотя мы объявляем main () с типом возвращаемого значения 'int'

Ответы [ 4 ]

14 голосов
/ 01 апреля 2010

Потому что вы не используете флаг -Wall.Когда вы это сделаете, вы должны получить:

foo.c:1: warning: return type defaults to ‘int’
foo.c: In function ‘main’:
foo.c:1: warning: implicit declaration of function ‘printf’
foo.c:1: warning: incompatible implicit declaration of built-in function ‘printf’
foo.c:1: warning: control reaches end of non-void function
2 голосов
/ 01 апреля 2010

Вы забыли скомпилировать с включенными предупреждениями:

gcc -Wall ...
1 голос
/ 01 апреля 2010

Ваша основная функция ничего не возвращает.так что измените в void main ().Обычно это:

int main() { printf("Hello world"); return 0; }
0 голосов
/ 01 апреля 2010

Предупреждение не выдается, потому что это законный ANSI C89. Предполагается, что функции без указанного возвращаемого типа неявно возвращают int.

Если вы хотите скомпилировать как C89, но получить предупреждение об использовании неявного int, вы должны передать либо -Wimplicit-int в качестве аргумента командной строки (или -Wall, который включает это предупреждение, вместе с рядом других).

Если вы хотите скомпилировать как C99, вы должны передать -std=c99 и -pedantic-errors, что заставит компилятор выдать ошибку, если вы используете неявное int.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...