C语言程序一般都由许多小的函数组成,而不是由少量较大的函数组成。 C程序可由一个主函数和多个其他函数构成,由主函数调用其他函数,其他函数之间也可以互相调用。函数之间的通信可以通过参数(实参到形参)、函数返回值(return)以及外部变量进行。
说明:(1)若干源文件,但是仅有一个主源文件,便于编写、分别编译,保证一个函数不被分离到多个文件中
# 三个函数分别为 main.c getline.c strindex.c
则可以使用命令 cc main.c getline.c strindex.c 来编译这3个文件,并把生成的目标代码存放在文件 main.o getline.o strindec.o 中,然后把这3个文件加载到可执行文件a.out中,如果存在错误(比如 main.c中存在错误),则可通过 命令 cc main.c getline.o strindex.o 重新编译并将编译结果一起加载到可执行结果a.out中
(2)一个源文件是一个编译单位,程序编译是以源文件为单位编译,而不是以函数为单位
(3)C程序的执行是从main函数开始的,main中结束
(4)函数之间相互独立,不能嵌套定义,可相互调用,但不能调用main函数,main函数是系统调用的
函数定义的一般形式:
类型标识符 函数名(形式参数列表)
{
声明部分
语句部分
}
形参不占内存空间,只有发生调用的时候才分配空间,调用结束后释放空间。在内存中形参和实参是不同的单元,形参的值改变不影响实参。
函数无返回值时,类型标识符可用void。
类型标识符不写 ,默认按整型处理,函数带有参数则要声明它们;如果没有参数,则使用void。
函数声明可在最前和mian函数里面,(Ritchie书里面一般放在最前 ),被调函数在主调函数之前可省。
编译系统不检查声明部分的参数名,可以不写。实参类型必须与函数原型中形参类型一致,否则出错。
extern声明外部变量的作用:1,可先使用后定义 2,在不同源文件中变量的使用
外部变量的作用域从声明它的地方开始到所在文件的末尾结束。(详见 Ritchie书P80)。外部变量的定义和使用不再同一个源文件中,则需使用关键字extern,但这个声明没有建立变量或为它们分配存储单元。在一个源文件夹的所有源文件中,一个外部变量只能在某个文件中定义一次,外部变量的定义中必须指定数组的长度,但extern声明不一定要指定数组长度。
例:
file1
extern int sp;
extern double val[];
void push(double ) { ... }
file2:
#define MAXVAL 100
int sp =0;
double val[MAXVAL];
static有定义的作用,如static int a; static 声明变量使它们仅供其所在的源函数使用,其他函数不能访问。
extern 和 static 都不释放存储空间。