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

main函数的规范

2013年10月08日 ⁄ 综合 ⁄ 共 1196字 ⁄ 字号 评论关闭

        从别人的里面学到了一点关于main的东西,先总结自己的心得,最后贴点原来的内容。

心得>

        在 c 和 c++  的规范里面,main() 的返回值都是 int 的,void main() 只是在某些编译器里能够通过编译,而在大部分严格的编译器里面根本是不能通过编译的。因为我们习惯了使用vc6,而vc6恰恰就是不够严格的编译器之一,所以造成了 void main() 是正确的这种概念。

        养成正确的编程习惯是好的,所以还是用一定正确的好:)

        int main();    // c++

        int main( void  );    //c

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

 

        函数的返回值都是有明确的作用的,使用返回值可以有效地控制以后的程序是否继续执行。所以void 这种没有任何意义的返回值对于main()来说,就是一种很大的浪费。

 

补充两点(转自原帖的内容):

1>关于int main( int argc, char *argv[], char *envp[] ) 

 

    这当然也不是标准 C/C++ 里面定义的东西!char *envp[] 是某些编译器提供的扩展功能,用于获取系统的环境变量。因为不是标准,所以并非所有编译器都支持,故而移植性差,不推荐使用。

 

 2>返回值的作用

 

        main 函数的返回值用于说明程序的退出状态。如果返回 0,则代表程序正常退出;返回其它数字的含义则由系统决定。通常,返回非零代表程序异常退出。下面我们在 winxp 环境下做一个小实验。首先编译下面的程序:

 

           int main( void )

           {

                  return 0;

           }

 

    然后打开附件里的“命令提示符”,在命令行里运行刚才编译好的可执行文件,然后输入“echo %ERRORLEVEL%”,回车,就可以看到程序的返回值为 0 。假设刚才编译好的文件是 a.exe ,如果输入“a && dir”,则会列出当前目录下的文件夹和文件。但是如果改成“return -1”,或者别的非 0 值,重新编译后输入“a && dir”,则 dir 不会执行。因为 && 的含义是:如果 && 前面的程序正常退出,则继续执行 && 后面的程序,否则不执行。也就是说,利用程序的返回值,我们可以控制要不要执行下一个程序。这就是 int main 的好处。如果你有兴趣,也可以把 main 函数的返回值类型改成非 int 类型(如 float),重新编译后执行“a && dir”,看看会出现什么情况,想想为什么会出现那样的情况。顺便提一下,如果输入 a || dir 的话,则表示如果 a 异常退出,则执行 dir     

 

 

抱歉!评论已关闭.