一个C程序可以由若干个源程序文件组成,每一个源文件可以由若干个函数和预处理命令以及全局变量声明部分组成,每一个函数由函数首部和函数体组成。c程序的结构如图所示。
作为一名程序开发人员,不可能每次编写都从最底层开发。比如在上例中,要输入一串字符到输出设备上,我们需要做的仅是调用printf()函数,至于"Hello C! "是怎样显示的,我们并不关心。我们认识printf()函数,在编写程序时调用它,更需要让程序认识它,这样才能使用printf()函数提供的功能,这就需要使用#include ,包含标准输入输出头文件,这样程序就能够认识printf()函数,并执行其功能。
C提供有丰富的函数集,我们称之为标准函数库。标准函数库包括15个头文件,借助这些函数可以完成不同的功能。
例如, 【范例2-1】中有#include时,就可以使用该数学函数库头文件提供的如开平方函数sqrt(),求出半径radius为2时的开平方值1.414;又如,当程序包含头文件"malloc.h"时,就可以完成对内存申请和释放等功能。
2.2.2函数声明
标准C语言引入了新的更好的函数声明方法,即用函数原型指定函数更多的信息,通过函数原型可以将函数的名字和函数类型以及形式参数的个数、类型、顺序通知编译系统,以便在调用函数时,系统可以对照检查。
函数声明由函数返回类型、函数名和形参列表组成。形参列表必须包括形参类型,但是不必对形参命名。这3个元素被称为函数原型,函数原型描述了函数的接口。定义函数的程序员提供函数原型,使用函数的程序员就只需要对函数原型编辑即可。
函数声明的一般形式为:
函数返回类型函数名(参数类型1,参数类型2,......);
函数声明包括函数的返回类型和函数名,来看下面这个例子。
- 01 int fun (int a, int b);02 void display();03 float fn (float x);
复制代码
其中, int, void和float都是函数返回类型,也属于数据类型。fun, display和fn是所调用的函数名。也就是说, fun()函数返回的数据类型为整型int; display()函数返回的类型为void型,指函数无返回值; fn()返回的数据类型为浮点型float。
fun (int a, int b)数内部的a和b为形参,其参数类型都为int型。fn (float x )函数内部参数x的类型为float型。函数声明中的形参名往往被忽略,如果声明中提供了形参的名字,也只是用作辅助文档。另外要注意函数声明是一个语句,后面不可漏分号!
进一步对函数做解释,需要注意的有以下几点。
(1)函数名称后面必须有小括号,不能省略,这是函数的特征。