c语言中int main()主函数的结尾为何有时有return 0有时没有?
作者:SuperSodaSea
链接:https://www.zhihu.com/question/51597277/answer/126602590
参考标准:
C11(ISO/IEC 9899:2011)
C11 5.1.2.2.3 Program termination
……如果main函数的返回值是一个与int兼容的值,那么main函数的初始调用的返回相当于用main函数的返回值作为参数调用exit函数;
到达终止main函数的}时会返回0。……
TL;DR:main函数不写return默认返回0。
----------------分割线----------------
补充一下不是main的情况:C11 6.9.1 Function definitions即使在x86中返回值的确存放在eax寄存器中,实际使用中也不应该依赖这种未定义行为。编译器一般会扔给你一个警告,比如:
如果到达终止函数的},且函数调用的值被调用者使用,则行为未定义。
[Warning] no return statement in function returning non-void [-Wreturn-type]
下面这段英文描述是从C99标准的PDF文档上复制下来的:
5.1.2.2.1 Program startup
The called at program startup is named main.The implementation declares no
prototype for this .It shall be defined with a return type of int and with no
parameters:
int main(void) { /* ... */ }
or with twoparameters (referred to here as argc and argv,though anynames may be
used, as theyare local to the in which theyare declared):
int main(int argc, char *argv[]) { /* ... */ }
or equivalent;9)or in some other implementation-defined manner.
从C99标准的规定里可以看出,main函数的标准定义一般为这两种形式:
第一种形式:
int main (void)
{
……
return 0;
}
第二种形式:
int main (int argc, char *argv[ ])
{
……
return 0;
}