C中主要function的样式

可能重复:
什么是主要的适当声明?

我正在研究我的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) { /* ... */ } 

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

 int main(int argc, char *argv[]) { /* ... */ } 

或同等学历; 9)或以其他一些实现定义的方式。

9)因此, int可以被定义为int的typedef名称替换,或者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退出function

¶5最后,控制权返回给主机环境。 如果status的值为零或EXIT_SUCCESS,则返回状态成功终止的实现定义forms。 如果status的值为EXIT_FAILURE,则返回状态为不成功终止的实现定义forms。 否则返回的状态是实现定义的。

旁白:请注意,§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。

操作系统可以在程序指示成功操作方面有所不同。 理想情况下,宏EXIT_SUCCESS扩展为适合编译程序的系统的值。

http://en.wikipedia.org/wiki/Exit_status

(你问的两件事与彼此无关。)

回答你的第一个问题:拥有int main()只意味着程序不接受命令行参数。 当它接受两个参数时,argc是参数count(它将始终大于或等于1,因为第一个参数将是程序本身的路径或名称),而argv是参数列表。

回答第二个问题: 保证底层操作系统将EXIT_SUCCESS解释为成功。