可能重复:
主要的正确声明是什么?
我正在研究我的C技能,我注意到了这一点
int main(int argc,char*argv [])
和
返回(EXIT_SUCCESS)
代替
int main()并返回0
为什么是这样?
Jon*_*ler 11
如果您要忽略参数列表,使用它是合理和明智的:
int main(void) { ... }
Run Code Online (Sandbox Code Playgroud)
标准保佑这种用法,以及带参数的标准.如果您编译-Wstrict-prototypes并且不包含void,那么您会收到来自GCC的警告,所以我写了void.这里的C++不同.
至于return EXIT_SUCCESS;,一般来说似乎没什么好处; 我继续return 0;在main()函数结束时写入,即使C99允许你省略任何返回(然后它的行为就像你写的那样return 0;).
ISO/IEC 9899:1999
§5.1.2.2.1程序启动
1程序启动时调用的函数被命名
main.该实现声明此函数没有原型.它应定义为返回类型int且没有参数:Run Code Online (Sandbox Code Playgroud)int main(void) { /* ... */ }或者有两个参数(这里称为
argc和argv,虽然可以使用任何名称,因为它们是声明它们的函数的本地名称):Run Code Online (Sandbox Code Playgroud)int main(int argc, char *argv[]) { /* ... */ }或同等学历; 9)或以其他一些实现定义的方式.
9)因此,
int可以替换为定义为的typedef名称int,或者argv可以写为 的类型char ** argv,依此类推.§5.1.2.2.3程序终止
1如果
main函数的返回类型是兼容的类型int,则从初始调用main函数的返回等效于调用exit函数返回的main函数作为其参数; 10)到达该}终止main函数返回值0.如果返回类型不兼容int,则返回到主机环境的终止状态未指定.10)根据§6.2.4,具有自动存储持续时间的物体的寿命
main将在前一种情况下结束,即使它们在后一种情况下也没有.§7.20.4.3退出功能
5最后,控制权返回给主机环境.如果status的值为零或EXIT_SUCCESS,则返回状态成功终止的实现定义形式.如果status的值为EXIT_FAILURE,则返回状态为不成功终止的实现定义形式.否则返回的状态是实现定义的.
旁白:请注意,§5.1.2.2.3清楚地表明C标准允许实现允许返回类型以外的main()其他类型int(与C++标准不同,后者明确禁止其他类型的返回类型int).但是,正如Jens正确指出的那样,只有在实现明确记录允许的情况下才允许使用非int返回类型main,并且文档可能会对允许的内容进行限制.
| 归档时间: |
|
| 查看次数: |
1657 次 |
| 最近记录: |