C语言深度总结[全面认识main函数返回值类型]

C语言main函数返回值类型支持哪些?

        main函数的返回值,用于说明程序的退出状态。 return返回的数值由程序的作者自定。返回不同的值可以代表不同的含义,一般是代表出错的原因。如果返回0,则代表程序正常退出;返回其它数字的含义则由系统决定。通常,返回非零代表程序异常退出。

C语言有两个宏,它定义在 stdlib.h 中。顺便提一哈,也许聪明厉害的你早就知道了。

     #define EXIT_SUCCESS    0

     #define EXIT_FAILURE       1

     默认EXIT_SUCCESS 为成功返回, EXIT_FAILURE 为出错返回,相当于调用abort()函数。

下面分别说一下 C 和 C++ 标准中对 main 函数的定义。 

        在 C89 中,main( ) 是可以接受的。Brian W. Kernighan 和 Dennis M. Ritchie 的经典巨著 The C

programming Language 2e(《C 程序设计语言第二版》)用的就是 main( )。不过在最新的 C99 标准中,只有以下两种定义方式是正确的: 

           int main( void ) 

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

如果不需要从命令行中获取参数,请用int main(void) ;否则请用int main( int argc, char *argv[] )。 main 函数的返回值类型必须是 int ,这样返回值才能传递给程序的激活者(如操作系统),等同于  exit(0)。

如果 main 函数的最后没有写 return 语句的话,C99 规定编译器要自动在生成的目标文件中(如 exe 文件)加入return 0;,表示程序正常退出。不过,建议你最好在main函数的最后加上return语句,虽然没有这个必要,但这是一个好的习惯。注意,vc6不会在目标文件中加入return 0; ,大概是因为 vc6 是 98年的产品,所以才不支持这个特性。不过,gcc3.2(Linux 下的 C编译器)会在生成的目标文件中加入 return 0。

C++98 中定义了如下两种 main 函数的定义方式:

          int main( ) 

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

        int main( ) 等同于 C99 中的 int main( void ) ;int main( int argc, char*argv[] ) 的用法也和C99 中定义的一样。同样,main函数的返回值类型也必须是int。如果main函数的末尾没写return语句,C++98 规定编译器要自动在生成的目标文件中加入 return 0; 。同样,vc6 也不支持这个特性,但是 g++3.2(Linux 下的 C++编译器)支持。

现在我们来做一个小试验来观察main()函数的返回值。

注意:本系列我都在Mac下开发演示,但适用于unix/linux系统。如果在Windows系统有不一样的表现时,我会指明。

编写如下代码并编译运行:

   //a.c    

    #include "stdio.h"

    int main(void)

    {

        printf("I love you.");

        return 0;

    }

    将这个文件保存为a.c,编译运行后会生成一个a.out文件。现在打开命令提示符,在命令行里运行刚才编译好的可执行文件,然后输入   echo $? ,回车,就可以看到程序返回 一个0 。如果把 return 0; 改为 return 110; ,那么很显然,再次执行上述步骤以后你可以看到程序返回110。要是你这样写 return 110.01; 那还是返回110,因为110.01被传给操作系统之前,被强制类型转换成整数类型了。

    现在,我们把a.c改回原来的代码,然后再编写另一个程序b.c:

    //b.c

    #include "stdio.h"

    int main(void)

    {

        printf("\nI'm too.");

        return 0; 

    }

    编译运行后打开命令提示符,在命令行里输入a&&b 回车,这样你就可以看到《人鬼情未了》里面经典的爱情对白:

    I love you.

    I'm too.

    && 的含义是:如果 && 前面的程序正常退出,则继续执行 && 后面的程序,否则不执行。所以,要是把a.c里面的 return 0; 删除或者改为 return 99; ,那么你只能看到 I love you. 。也就是说,程序b.c就不执行了。现在,大家该明白 return 0; 的作用了吧。

总结

1.main函数的返回值为int,请牢记在心。用于说明程序的退出状态。如果返回0,则代表程序正常退出;返回其它数字的含义则由系统决定。通常,返回非零代表程序异常退出。

2.无论在任何平台做C语言开发,main函数最后一行代码请留给return 0;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 14,181评论 0 38
  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 3,585评论 3 44
  • 最近在论坛上看到有不少网友的程序中,main函数都写成void main(),而不是int main()。那么,到...
    ZayAlan阅读 2,993评论 0 1
  • 题目类型 a.C++与C差异(1-18) 1.C和C++中struct有什么区别? C没有Protection行为...
    阿面a阅读 7,873评论 0 10
  • 前言 Tomcat遵循J2EE规范,实现了Web容器。很多有关web的书籍和文章都离不开对Tomcat的分析,初学...
    holy_z阅读 844评论 0 1

友情链接更多精彩内容