3.2 C语言的main( )函数

C语言程序总是从main( )函数开始执行的。main( )函数属于一种特殊的函数,整个C语言编写的程序可以看作若干函数的集合。

利用函数可以方便地对C语言程序代码进行封装和扩充。函数的本质是 C语言中的一种代码块,各函数之间相互独立,而又可以进行互相调用,各函数都应符合图3-2中所示的形式。

图3-2 C语言函数格式及示例

图3-2为C语言函数的格式,可以看出函数名称的前面为该函数的返回值类型,后面为参数列表。参数列表由一对小括号包含,可以为空。函数的主体实现由一对大括号包括,整个函数的结构很简洁。

图3-2还给出了一个简单的函数举例,该函数的名称为main,没有参数列表,返回值类型为int型。

一个 C语言程序必须有一个名称为 main的函数。图3-3给出了一个 main( )函数经过编译后的代码以及运行原理示意图。

图3-3 C语言程序入口位置示意图

在图3-3中所示的代码中,介于“/*”和“*/”之间的部分是程序的注释,也就是方便编程人员理解程序使用的。在编译链接环节,注释是不会被解释成二进制代码的,因此注释不具有任何可执行性。图3-3所示的程序可以正常编译和运行,但是没有任何运行结果,这是因为程序中没有任何程序代码。

作为对比,图3-4中给出了在Keil μVision中编写的一个仅含有main( )函数的C语言程序。程序将从第3行的main( )函数开始执行。第4行和第12行的一对大括号之间的语句为main( )函数的内容。

图3-4 在Keil μVision中编写C语言程序

图3-4中给出的示例中,第1条语句设置编译时使用的头文件。第3条语句为main( )函数的入口,程序将从此处开始运行。第4条语句的大括号为main( )函数内容的开始。第5条语句执行函数SystemInit,该函数在包含的头文件中有声明。

程序第7条语句为永久循环语句。第8条语句和第11条语句的一对大括号构成了一个循环语句块。具体来说,当第7条语句中的表达式成立的时候,将会执行循环语句块里的内容。执行完毕则重新判断第7条语句中的表达式是否成立,若成立则会再次执行循环语句块里的内容。当第7条语句中的表达式不成立时,则会执行第11条语句的下一条语句。

C语言中判断表达式成立与否是通过将表达式求值后进行的,若求值后的数值为1,则表示表达式成立,否则表示表达式不成立。而图3-4中,第7条语句“while(1)”中括号内的数值为1,即恒成立。因此第8条语句的“{”和第11条语句的“}”构成了一个语句块里的代码会永远循环执行。

由于采用C语言编写的代码和经过编译、链接后形成的二进制代码在逻辑上是相同的,所以今后对C语言程序的解释亦即对相应的可执行代码的解释。本书会以变量、关键词、函数为主题,对C语言编程的相关知识进行介绍。