相关文章推荐
  • C 语言中 main 函数成为主函数
  • 一个 C 程序是从 main 函数开始执行

请看下面 main 函数定义正确码?
【C语言进阶剖析】33、main 函数与命令行参数_c  学习
还是用编译器尝试一下
【C语言进阶剖析】33、main 函数与命令行参数_c  学习_02
从结果我们可以看到除了 A,编译器给出警告,main 函数默认返回类型为 int,其他都编译运行没有问题。

也就是说上面四种写法都是正确的。

1.1 main 函数的本质
  • main 函数是操作系统调用的函数
  • 操作系统总是将 main 函数作为应用程序的开始
  • 操作系统将 main 函数的返回值作为程序的退出状态

操作系统是希望 main 函数的有返回值的,这样可以知道 main 函数的退出状态。如果程序时异常退出的,在有的系统上面,会得到提示:程序异常退出。main 函数的返回值正常来说是 0,如果是其他值,就是错误的状态。

思考:为什么 C 编译器支持这么多不同的 main 函数原型?

C 语言应用早期,Unix 系统刚刚诞生,C 语言的应用还比较简单,进行科学计算或者简单的嵌入式编程,不想现在有如此丰富的操作系统,程序不在操作系统上运行,返回值也没有什么意义,所以在这种情况下,干脆不写 main 函数法返回值了。到后期,出现很多商业编译器,比如 bcc,gcc,vs,只有最大的支持 C 语言的特性才能卖的好呀,不然很顶卖的不好呀。由于历史的原因和商业竞争的原因,gcc 编译器肯定也是支持不同的 main 函数原型的。

1.2 编程实验

这个实验我们来看一下 main 函数的返回值,这次在 window 下用 bcc 编译器编译。

// 33-2.c
#include <stdio.h>
int main()
    return 99;

这是最简单的函数,编译执行后可以通过环境变量 %ERRORLEVEL% 获得函数的返回值,我们尝试一下:
【C语言进阶剖析】33、main 函数与命令行参数_c  学习_03
main 函数执行结束后将返回值返回给操作系统,我们执行命令 echo %ERRORLEVEL% 可以获得这个返回值。

现在有个问题,操作系统拿这个返回值做什么呢?,我们继续尝试

// 33-2-A.c
#include <stdio.h>
int main()
	printf("I'm A!\n");
    return 0;
// 33-2-B.c
#include <stdio.h>
int main()
	printf("I'm B!\n");
    return 99;
 
 
推荐文章