1. 一个程序由一个或多个源程序文件组成
一个规模较小的程序,往往只包括一个源程序文件.
在一个源程序文件中可以包括3个部分:
①预处理指令。
如 #include<stdio.h> (还有一些其他预处理指令,如#define 等)
C编译系统在对源程序进行“翻译”以前,先由一个预处理器(也称预处理程序、预编译器)对预处理指令进行预处理,对于#include<stdio.h> 指令来说,就是将stdio.h 头文件的内容读进来,取代#include<stdio.h>。 由预处理得到的结果与程序其他部分一起,组成一个 完整的、可以用来编译的最后的源程序,然后由编译程序对该源程序正式进行编译,才得到目标程序。
②全局声明。即在函数之外进行的数据声明。例如可以把例1.2程序中的“int a,b,sum;”放到main函数的前面,这就是全局声明,在函数外面声明的变量称为全局变量。如果是在程序开头(定义函数之前)声明的变量,则在整个源程序文件范围内有效。在函数中声明的变量是局部变量,只在函数范围内有效。关于全局变量和局部变量的概念和用法见 本书第7章。在本章的例题中没有用全局声明,只有在函数中定义的局部变量。
③函数定义。如例1.1、例1.2和例1.3中的main函数和例1.3中的max函数,要指 定每个函数的功能。在调用这些函数时,会完成函数定义中指定的功能。
2. 函数是C 程序的主要组成部分
程序的几乎全部工作都是由各个函数分别完成 的,函数是C 程序的基本单位,在设计良好的程序中,每个函数都用来实现一个或几个特定的功能。编写C 程序的工作主要就是编写一个个函数。
一个C 语言程序是由一个或多个函数组成的,其中必须包含一个main函数(且只能有一个main函数)。例1.1和例1.2中的程序只由一个main函数组成,例1.3程序由一个main函数和一个max 函数组成,它们组成一个源程序文件,在进行编译时对整个源程序文件统一进行编译。
一个小程序只包含一个源程序文件,在一个源程序文件中包含若干个函数(其中有一个main函数)。当程序规模较大时,所包含的函数的数量较多,如果把所有的函数都放在同一个源程序文件中,则此文件显得太大,不便于编译和调试。为了便于调试和管理,可以使一个程序包含若干个源程序文件,每个源程序文件又包含若干个函数。一个源程序文件就是一个程序模块,即将一个程序分成若干个程序模块。
在进行编译时是以源程序文件为对象进行的。在分别对各源程序文件进行编译并得到相应的目标程序后,再将这些目标程序连接成为一个统一的二进制的可执行程序。
C语言的这种特点使得容易实现程序的模块化。
在程序中被调用的函数,可以是系统提供的库函数(例如printf和scanf函数),也可以 是用户根据需要自己编制设计的函数(例如例1.3中的max函数)。C的函数库十分丰富,ANSIC 建议提供了一百多个标准库函数,不同的C 编译系统除了提供标准库函数外,还增 加了其他一些专门的函数,如Turbo C提供了三百多个库函数。不同编译系统所提供的库 函数个数和功能是不完全相同的。
3. 一个函数包括两个部分
① 函数首部。即函数的第1行,包括函数名、函数类型、函数属性、函数参数(形式参数)名、参数类型。
例如,例1.3中的max函数的首部为
int max (int X, int y)
函数类型 函数名 函数参数类型 函数参数名 函数参数类型 函数参数名
一个函数名后面必须跟一对圆括号,括号内写函数的参数名及其类型。如果函数没有参
数,可以在括号中写 void,也可以是空括号,如
int main(void)
或
int main()
②函数体。即函数首部下面的花括号内的部分。如果在一个函数中包括有多层花括号,则最外层的一对花括号是函数体的范围。
函数体一般包括以下两部分。
-
-
- 声明部分。声明部分包括:定义在本函数中所用到的变量,如例1.3中在main 函数中定义变量“int a,b,c;”;对本函数所调用函数进行声明,如例1.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. 程序应当包含注释
一个好的、有使用价值的源程序都应当加上必要的注释,以增加程序的可读性。