通过上一节的三个C程序例子,可以看到一个C语言程序的结构有以下特点:
(1)、一个程序由一个或多个源程序文件组成。一个规模较小的程序,往往只包含一个源程序文件,如例1和例2是一个源程序文件中只有一个函数(main函数),例3中有两个函数,属于同一个源程序 文件。在一个源程序文件中可以包含3个部分:
a、预处理指令。如#include<stdio.h>(还有一些其他预处理指令,如#define等)。C编译系统在对源程序进行“翻译”以前,先由一个“预处理器”对预处理指令进行预处理,对于#include<stdio.h>指令来说,就是将stdio.h头文件的内容读进来,放在#include指令行,取代了#include<stdio.h>。由预处理得到的结果与程序其他部分一起,组成一个完整的、可以用来编译的最后的源程序,然后由编译程序对该源程序正式进行编译,才得到目标程序。
b、全局声明。即在函数之外进行的数据声明。例如可以把例2程序中的“int a, b, sum;”放在main函数的前面,这就是全局声明,在函数外面声明的变量称为全局变量。如果是在程序开头(定义函数之前)声明的变量,则在整个源程序文件范围内有效。在函数中声明的变量是局部变量,只在函数范围内有效。
c、函数定义。如例1、例2和例3中的main函数和例3中的max函数,每个函数用来实现一定的功能。在调用这些函数时,会完成函数定义中指定的功能。
(2)、函数是C程序的主要组成部分。程序的几乎全部工作都是由各个函数分别完成的,函数是C程序的基本单位,在设计良好的程序中,每个函数都用来实现一个或几个特定的功能。编写C程序的工作主要就是编写一个个函数。
一个C语言程序是由一个或多个函数组成的,其中必须包含一个main函数(有且仅有一个main函数)。例1和例2中的程序只由一个main函数组成,例3程序由一个main函数和一个max函数组成,他们组成一个源程序文件,在进行编译时对整个源程序文件统一进行编译。
一个小程序只包含一个源程序文件,在一个源程序文件中包含若干个函数(其中有一个main函数)。当程序规模较大时,所包含的函数的数量较多,如果把所有的函数都放在同一个源程序文件中,则此文件显得太大,不便于编译和调试。为了便于调试和管理,可以使一个程序包含若干个源程序文件,每个源程序文件又包含若干个函数。一个源程序文件就是一个程序模块,即将一个程序分成若干个程序模块。
在进行编译时是以源程序文件为对象进行的。在分别对各源程序文件进行编译并得到相应的目标程序后,再将这些目标程序连接成为一个统一的二进制的可执行程序。
C语言的这些特点使得容易实现程序的模块化。
在程序中被调用的函数,可以是系统提供的库函数(如printf和scanf函数),也可以是用户根据需要自己编制设计的函数。C的函数库十分丰富,ANSIC建议提供一百多个标准库函数,不同的C编译系统除了提供标准库函数外,还增加了其他一些专门的函数,如Turbo C提供三百多个库函数。不同编译系统所提供的库函数个数和功能是不完全相同的。
(3)一个函数包括两个部分。
a、函数首部。即函数的第一行,包括函数名、函数类型、函数属性、函数参数(形式参数)名、参数类型。
例如在例3中max函数的首部为
一个函数名后面必须跟一对圆括号,括号内写函数的参数名及其类型。如果函数没有参数,可以在括号中写void,也可是空括号,如:
int main(void)
或
int main()
b、函数体。即函数首部下面的花括号内的部分。如果在一个函数中包括有多层花括号,则最外层的一对花括号是函数体的范围。
函数体一般包括以下两个部分:
- 声明部分。声明部分包括:定义在本函数中所用到的变量,如例3中在main函数中定义变量“int a, b, c;”;对本函数所调用函数进行声明,如例3中在main函数中对max函数的声明“int max(int x, int y);”
- 执行部分。由若干个语句组成,指定在函数中所进行的操作。
在某些情况下也可以没有声明部分,甚至可以既无声明部分也无执行部分。如:
void dump()
{ }
它是一个空函数,什么也不做,但这是合法的。
(4)、程序总是从main函数开始执行的,而不论main函数在整个程序中的位置如何(main函数可以放在程序最前头,也可以放在程序最后,或在一些函数之前、另一些函数之后)。
(5)、程序中对计算机的操作是由函数中的C语句完成的。如赋值、输入输出数据的操作都是由相应的C语句实现的。C程序书写格式是比较自由的。一行内可以写几个语句,一个语句可以分写在多行上,但是为了清晰起见,习惯上每行只写一个语句。
(6)、在每个数据声明和语句的最后必须有一个分号。分号是C语句的必要组成部分。如c=a b;其中的分号是不可缺少的。
(7)、C语言本身不提供输入输出语句。输入和输出的操作是由库函数scanf和printf等函数来完成的。C对输入输出实行“函数化”。由于输入输出操作涉及具体的计算机设备,把输入输出操作用库函数实现,就可以使C语言本身的规模较小,编译程序简单,很容易在各种机器上实现,程序具有可移植性。
(8)、程序应当包括注释。一个好的、有使用价值的源程序都应当加上必要的注释,以增加程序的可读性。
搜索微信公众号【balayihuier】或扫描下方二维码关注微信公众号,资深软件工程师带你手把手撸代码,从此走上人生巅峰,迎娶白富美!公众号《吧啦一会儿》,手把手带你撸代码