问题:在C编程中,函数的声明为什么都习惯的写在头文件中,然后在需要调用的地方使用#include来包含?
带着这个问题,我创建了三个.c文件,分别命名a.c、b.c和c.c,并进行如下编程:
a.c文件:
int add(int a, int b)
{
return a + b;
}
b.c文件:
#include <stdio.h>
int add(int a, int b);
void print_sum(int a, int b)
{
printf("test two, sum=%d", add(a, b));
}
c.c文件:
#include <stdio.h>
int add(int a, int b);
void print_sum(int a, int b);
void main()
{
printf("test one, sum=%d", add(99 + 88));
print_sum(100, 200);
while(1);
}
从代码看,因为需求,int add(int a, int b);函数声明在b.c和c.c文件中都拷贝了一份,如果该函数的函数名、返回值或者形参后期需要修改,那么这时需要在a.c、b.c和c.c文件内都进行修改,如果拷贝的份数越多,那么后期代码修改同步时的维护工作量就越大。
OK,回到问题:在C编程中,函数的声明为什么都习惯的写在头文件中,然后在需要调用的地方使用#include来包含?
上面的例子代码中并没有将int add(int a, int b);函数的声明写在在头文件中,所以导致了“有多少处函数声明拷贝,后期函数声明修改就需要同步多少处代码”问题,那么下面改成将函数的声明写在头文件中,使用#include的方式来包含头文件:
再创建两个头文件,分别为a.h和b.h,并且进行如下编程:
a.h文件:
#ifndef __A_H__
#define __A_H__
int add(int, int);
#endif
b.h文件:
#ifndef __B_H__
#define __B_H__
#include <stdio.h>
#include "a.h"
void print_sum(int a, int b);
#endif
然后分别修改b.c和c.c文件如下:
b.c文件:
#include "b.h"
void print_sum(int a, int b)
{
printf("test two, sum=%d", add(a, b));
}
c.c文件:#include "b.h"
void main()
{
printf("test one, sum=%d", add(99 + 88));
print_sum(100, 200);
while(1);
}
修改后的程序运行结果和修改前的一样,分析修改前后代码发现,将函数声明编写在一个头文件中,如果后期函数声明需要修改,那么只需要修改一个头文件里的函数声明即可。总结问题答案:
函数的声明都习惯的编写在头文件中,然后在需要调用的地方使用#include包含可以避免函数的声明多处拷贝而导致的后期维护难问题。