C中主要功能的样式

时间:2012-01-01 06:38:46

标签: c coding-style

  

可能重复:
  What is the proper declaration of main?

我正在研究我的C技能,我注意到了

  

int main(int argc,char * argv [])

  

返回(EXIT_SUCCESS)

而不是

  

int main()并返回0

为什么会这样?

5 个答案:

答案 0 :(得分:11)

如果你要忽略参数列表,使用它是合理和明智的:

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退出功能

     

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

除此之外:请注意,§5.1.2.2.3清楚地表明C标准允许实现允许除main()以外的int的返回类型(与C ++标准明确不同)禁止除int以外的返回类型。但是,正如Jens正确指出的那样,只有在实现明确记录允许的情况下才允许来自int的非main返回类型,并且文档可能会限制是允许的。

答案 1 :(得分:1)

int main (int argc, char * argv [])用于获取命令行参数。

EXIT_SUCCESS只是#define,比0描述性更强。

答案 2 :(得分:1)

int main( int argc, char *argv[] )允许用户在执行程序时输入参数,即在程序名称后在控制台中写入的文本。

return (EXIT_SUCCESS)以防万一。不希望0作为成功退出的值:它将是任何其他值,但在大多数情况下,EXIT_SUCCESS等于0.。

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

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

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

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