现在的位置: 首页 > 综合 > 正文

main()的返回值

2013年07月20日 ⁄ 综合 ⁄ 共 1941字 ⁄ 字号 评论关闭
其实我们学的很多东西只是注重的浅层,并没有去深入的探索,就像这篇介绍main()的返回值。如果读者想要去验证的话,可以用visual stuio c/c++里面逐过程调试的功能快捷键F10、逐语句快捷键F11.你会看到最后定位到crtexe.c文件中。
下面是一篇转载:
http://www.cublog.cn/u1/59829/showart_490892.html
main函数的返回值大家注意了吗,也许有人会说可以没有返回值,如果你深入到程序的CRT启动代码,你会发现....
 
            __initenv = envp;
            mainret = main(argc, argv, envp);

#endif  /* WPRFLAG */
#endif  /* _WINMAIN_ */
            /*
             * Note that if the exe is managed app, we don't really need to
             * call exit or _c_exit. .cctor should be able to take care of
             * this.
             */
            if ( !managedapp )
                exit(mainret);
            if (has_cctor == 0)
                _cexit();
 
按照新的C99标准,即使函数本身没有定义返回值,编译器也会加上,以返回给激发程序,运行状态.
 
 
 
Mnky
c语言规范中,最好main是有返回值的,即使没有,其实编译器也会给你加上。
Main函数的返回值是提供给它的激发程序,判断其运行状态的,比如是否成功。
一般情况下,返回给操作系统;特殊情况下,可以通过别的程序调用这个程序,同时捕获这个程序main的返回值。
另外,当前程序其实也可以调用main函数,所以也可以利用返回值。
liubingqian
return返回的数值由程序的作者自定。返回不同的值可以代表不同的含义,一般是代表出错的原因。传统上返回0代表程序正常结束(其它返回值代表什么含义,需要程序的开发者向程序的用户说明)。
在UNIX中,一个程序仅仅完成一个简单但有用的操作;不像Windows中的应用程序那样试图包办一切。所以,UNIX中很多程序都是可以分
工协作的。后面程序的输入可以从前面程序的输出获得。这样在一些关键应用中,后面的程序可以检测一下前面的程序是否正常退出,如果是正常退出的,再按照预
先的流程进行下面的操作;如果前面的程序不是正常退出,那么前面的程序的输出很可能不是后面程序需要的输入数据,这就需要进行特殊的处理。
而后面的程序就是靠前面程序main函数的返回值判断的。程序结束时,把值交给操作系统,然后后面的程序或者shell可以从操作系统中取得这个值。
 
abupie
在 C89 中,main( ) 是正确的。Brian W. Kernighan 和 Dennis M. Ritchie 的经典巨著
The C programming Language(《C 程序设计语言》)用的就是 main( )。不过在最新的 C99
标准中,只有以下两种定义方式是正确的:
int main( void )
int main( int argc, char *argv[] )(参考资料:ISO/IEC 9899:1999 (E) Programming languages — C 5.1.2.2.1 Program startup)
  当然,我们也可以做一点小小的改动。例如:char *argv[] 可以写成 char **argv;argv 和 argc 可以改成别的变量名(如 intval 和 charval),不过一定要符合变量的命名规则。
如果你不需要从命令行中获取参数,请用 int main( void ) ;否则请用 int main( int argc, char *argv[] ) 。
main 函数的返回值类型必须是 int ,这样返回值才能传递给程序的激活者(如操作系统)。楼上很多兄弟都写出具体的shell例子了.

如果 main 函数的最后没有写 return 语句的话,C99 规定编译器要自动在生成的目标文件中(如 exe 文件)加入
return 0 ,表示程序正常退出。比如gcc3.2会在生成的目标文件中加入 return 0 。但是不是所有的编译器都是如此做,
有的是提示错误, 有的会提示warning自动添加. 比如vc6 不会在生成的目标文件中加入 return 0 (大概是因为 vc6 是 98
年的产品,所以才不支持这个特性。)。建议你最好在 main 函数的最后加上 return
语句,虽然没有这个必要,但这是一个好的习惯(有的书直接把void main()打入冷宫).

抱歉!评论已关闭.