零基础学C语言(第4版)
上QQ阅读APP看书,第一时间看更新

3.3 C程序必须有的main函数

先看下面的代码段,这段代码是从代码3-1中截取出来的。为了学习方便,去掉了程序代码中的头文件注释部分。

01      void main(void)
02      {
03              printf("\nHello World!");
04              getchar();                                                      /*防止屏幕一闪而过*/
05      }

【代码解析】void main(void){…}这一段是定义C程序的主函数。函数是可以完成一定功能的子程序。main函数是C语言程序的起始执行点,每一个C程序必须有且仅有一个main函数。

请读者思考一个问题:操作系统是如何开始运行、调用一个程序的?也就是说操作系统怎么知道一个程序的入口点在哪里?所谓入口点,就是程序的第一条指令。操作系统调入程序二进制代码到内存后,从哪条指令开始运行程序呢?

一种办法是从文件第一行开始,一行一行往下执行,直到文件结束。很多语言就是采用这种方式,比如QBASIC语言。这种方法的好处显而易见,人类是怎么阅读的,计算机就是怎么执行的。但是缺点也很多,当有两个源文件的时候,从哪个文件开始呢?

另一种办法是和运行程序的启动者协商一个规定的入口名称,从这个名称开始进入。这种方法就是C语言采用的方法。

main函数就是C程序的入口点。无论整个工程有多少个C源文件,必须编写且只能编写一个main函数。程序就是从main的第一条语句开始执行,然后在main函数中顺序执行其他语句,在这些语句中,调用其他函数,从而使整个程序运行起来。main函数结束了,整个程序也就结束了。由此可见,写C程序,就是写main函数。

简单地说明一下定义函数的语法。对函数的详细讲解请参考后续章节。

对于C语言,定义函数的语法规则如下:

返回值类型  函数名称( 参数1,参数2…)
{
函数体
}

对比上面的语法规则可以看出,在void main(void)这一行中,第一个void是指main函数的返回值数据类型,void表示main函数仅仅完成某些功能,不向调用者返回数值。main是函数名称。函数可以是C语言系统提供的系统函数,也可以是用户自己编写的函数。用户自己编写的函数,函数名字可以自行决定。main后面是小括号对“()”,括号里是传递给函数的参数。类似代数里的函数y=f(x)一样,其中x就是参数,f是函数名称。参数可以没有,可以是一个,也可以是多个。每个参数都有一个数据类型。本例中的参数的数据类型是void,表示main函数不需要参数。小括号后面紧接着的是大括号对“{}”,大括号对里的代码就是main函数实现的功能,被称作函数体。对于在函数体里能做哪些事情也是有规定的。会在函数一章里详细说明。

留给读者以下3个试验:

(1)编写一个空的main函数。

(2)修改main函数的名称。

(3)编写两个main函数。

请分别在计算机上编译、连接、运行、编辑这3个试验,并观察发生的现象。