为什么,如果我写
int main()
{
//...
}
Run Code Online (Sandbox Code Playgroud)
return 0;在main功能结束时我不需要写吗?编译器是否为我做了?
我用的是GCC/C99.
Pet*_*ham 20
C99和C++特例main如果控件到达结尾没有显式返回,则返回0 的函数.这仅适用于该main功能.
对于main特殊情况,C99规范的相关位是5.1.2.2.3
5.1.2.2.3程序终止
如果main函数的返回类型是与int兼容的类型,则从初始调用返回main函数等效于调用exit函数,
其中main函数返回的值作为其参数; 到达}那个终止main函数返回值0.6.9.1/12
如果
}终止了函数,并且调用者使用了函数调用的值,则行为是未定义的.
你可以用gcc测试一下:
int foo ( void ) { }
int main( void ) { }
Run Code Online (Sandbox Code Playgroud)
C89模式(两种功能的错误):
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)