我们在编写程序的时候,总不能将所有的程序放在一个源文件中,这样也不便于团队开发和维护。这就需要将程序有序的组织在不同的文件中,头文件中只是程序的接口部分,而在源文件中负责具体实现,如果其他源文件中有需要调用该源文件中的某个函数,只需要包含头文件即可。以欧几里德算法计算两个数的最大公约数为例:
gcd函数的实现在euclid.c中
/* The gcd() function */
int gcd(int a, int b)
{
while (b) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
对于扩展欧几里德算法ext_euclid()同样在euclid.c中实现
那么来看euclid.h头文件该怎么写
/* ensure include only once */
#ifndef __EUCLID_H__
#define __EUCLID_H__
/* global variables (decared in euclid.c) */
extern int x, y;
/* compute gcd */
int gcd(int a, int b);
/* compute g = gcd(a, b) and solve ax + by = g */
int ext_euclid(int a, int b);
#endif
前面的ifndef和define是头文件中常见的写法,是为了防止重复包含该头文件。
extern关键字表示引用的其它地方定义的变量,这两个变量假设定义在euclid.c中。
如果我们要使用这两个算法,只需要使用包含euclid.h头文件即可。
#include "euclid.h"
同时我们还可以访问euclid.c中定义的整型变量x和y。