C中主要功能的样式

lod*_*kkx 4 c coding-style

可能重复:
主要的正确声明是什么?

我正在研究我的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且没有参数:

int main(void) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

或者有两个参数(这里称为argcargv,虽然可以使用任何名称,因为它们是声明它们的函数的本地名称):

int main(int argc, char *argv[]) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

或同等学历; 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,并且文档可能会对允许的内容进行限制.