C语言非常道
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3.3 main函数

函数的名字也是一个标识符,想起什么名字由你决定,是你的自由。但是,如果你的程序要在操作系统里运行(就像所有Windows程序和Linux程序一样),源文件中就必须有一个叫作main的函数。

操作系统不但为用户操作计算机提供方便,允许我们用键盘或者鼠标来管理计算机、运行各种程序,还管理着各种各样的程序和硬件资源。当我们要运行一个程序(比如一个电子游戏)时,它要负责把程序从外部存储设备(比如硬盘或者U盘)调入内存,并把控制权交给程序。当程序执行结束之后,还要清理程序所占用的资源。

为了能够让操作系统识别、管理程序,控制程序的运行,源文件在翻译之后所生成的机器指令里不但含有与源文件内容相对应的部分,还附加了一些额外的代码,用来初始化程序的运行环境,并在程序结束时做一些清理工作。

因此,如图1-6所示,当翻译之后的程序开始执行时,是由操作系统把控制转移到程序的初始化部分,于是处理器就开始取这里的指令并加以执行。这些指令用于完成例行的初始化工作,就像你刚搬进新家,要先布置布置,为过日子做一些准备工作。然后,初始化代码将调用main函数。当main函数执行完毕,又返回到调用点之后完成清理工作,最后返回操作系统。

图1-6 源文件的翻译和程序的执行过程

相反,如果翻译后的程序不需要依赖操作系统就能运行,比如你所写的程序本身就是一个操作系统,或者你制造了一个简单的机器人,需要一个软件来控制它,这就不需要操作系统,你的程序直接运行在处理器上,直接控制机器人的各个部件。在这种情况下,程序里不必非得有一个名字为main的函数。

尽管“main”不是C语言里的关键字,但它的拼写是固定的。很多没有经过严格训练的新手容易把它打成“mian”或者“Main”,一定要注意避免。

C语言规定,函数main的返回类型应当是int或者与int等同的类型,所以它必须返回一个整数值,这个值通常用于指示程序的执行成功与否。按照惯例,返回0代表程序正常结束,非零值表示其他含义。在上述main函数里,我们是直接返回一个0值:

                return  0;

与其他函数不同,从C99(ISO/IEC 9899:1999)开始规定,如果main函数里没有return语句,则程序的执行到达组成函数体的右花括号“}”时自动返回,并默认返回数值0。

函数是将返回值传递给它的调用者。然而,和其他函数不同,main函数是将值返回到操作系统。

本章的内容到这里就结束了,在下一章里,我们将学习如何将这个程序翻译为可执行程序并观察执行结果。