C99 и C ++ особый случай: функция main
возвращает 0, если управление достигает конца без явного возврата.Это только относится к функции main
.
Соответствующий бит спецификации C99 равен 5.1.2.2.3 для main
особого случая
5.1.2.2.3 Завершение программы
Если тип возвращаемого значения основной функции является типом, совместимым с int, возврат из начального вызова основной функции эквивалентен вызову функции выхода со значением
возвращается основной функцией в качестве аргумента; при достижении }
, который завершает основную функцию, возвращается значение 0.
6.9.1 / 12
Если достигнут }
, который завершает функцию, а значение вызова функции используется вызывающей стороной, поведение не определено.
Вы можете проверить это с помощью gcc:
int foo ( void ) { }
int main( void ) { }
C89 mode (ошибки дляобе функции):
sandiego:$ gcc src/no_return.c -std=c89 -Wall
src/no_return.c: In function ‘main’:
src/no_return.c:2: warning: control reaches end of non-void function
src/no_return.c: In function ‘foo’:
src/no_return.c:1: warning: control reaches end of non-void function
Режим C99 (основной - это особый случай):
sandiego:$ gcc src/no_return.c -std=c99 -Wall
src/no_return.c: In function ‘foo’:
src/no_return.c:1: warning: control reaches end of non-void function