C中主要功能的样式
可能重复:
什么是正确的主要声明?
我正在研究我的C技能,我注意到了这一点
int main(int argc,char * argv [])
和
返回(EXIT_SUCCESS)
代替
int main()并返回0
为什么是这样?
如果您将忽略参数列表,则使用以下内容是合理和明智的:
int main(void) { ... }
标准祝福这种用法,以及有争论的标准。 如果您使用-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) { /* ... */ }
或者带有两个参数(这里称为argc
和argv
,尽管可以使用任何名称,因为它们是声明它们的函数的本地):
int main(int argc, char *argv[]) { /* ... */ }
或等同物; 9)或以某种其他实施方式定义的方式。
9)因此, int
可以被定义为int
的typedef名称替代,或者argv
的类型可以被写为char ** argv
,依此类推。
§5.1.2.2.3程序终止
¶1如果main
函数的返回类型是与int
兼容的类型,则从初始调用返回到main
函数的返回等同于使用main
函数返回的值作为其参数来调用exit
函数; 10)达到}
终止main
函数返回值0.如果返回类型与int
不兼容,则返回到主机环境的终止状态未指定。
10)根据第6.2.4节的规定,在main
声明自动存储时间的物体的寿命将在前一种情况下结束,即使它们在后一种情况下不存在。
§7.20.4.3退出功能
¶5最后,控制权返回到主机环境。 如果状态值为零或EXIT_SUCCESS,则返回状态成功终止的实现定义形式。 如果状态值为EXIT_FAILURE,则返回状态不成功终止的实现定义形式。 否则,返回的状态是实现定义的。
除此之外:请注意,§5.1.2.2.3清楚地表明C标准允许实现允许除int
之外的main()
返回类型(与C ++标准不同,它明确禁止int
以外的返回类型)。 然而,正如Jens正确地指出的那样,只有当实现明确声明允许时,才允许从main
获得非int
返回类型,并且文档可能会限制允许的内容。
int main (int argc, char * argv [])
用于当你想获得命令行参数。
EXIT_SUCCESS
只是一个比# 0
更具描述性的#define
。
int main( int argc, char *argv[] )
允许执行程序时的用户输入参数,即程序名称后在控制台中写入的文本。
return (EXIT_SUCCESS)
是在操作系统不期望0作为成功退出值的情况下:它可以是任何其他值,但在大多数情况下,EXIT_SUCCESS等于0。