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;

    原文作者:batbattle
    原文地址: https://www.jianshu.com/p/e058b9b5e504
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞