在我们编写项目或者具有较多功能的程序时,我们不得不把具有各个功能的函数,进行分文件处理,这样不仅方便查找函数,而且也便于后期维护。但是分文件处理也会带来一些问题:头文件的重复包含,结果导致,程序无法编译链接通过。
预编译指令:
—引入头文件:
- #include <> :使用尖括号,预编译器会到系统路径下去寻找该头文件。
- #include " " :使用双引号,预编译器会先在当前文件所在目录下查找该头文件;如果没有找到,就回去系统路径下查找。
—写在头文件中的预处理开关指令
#ifndef 标记名
#define 标记名
函数声明、结构体的声明、类的声明等
#endif
上述预编译指令的意思就是:在预编译阶段,如果没有定义标记名、就定义标记名并将函数声明、结构体声明、类声明等拷贝到引入该头文件的文件中;如果定义了该标记,就结束该预编译指令
**注意:该指令和#ifdef #define #endif 相反,但都是成对出现的
正确代码示例:
sum.h文件
#ifndef SUM_H #define SUM_H extern int sum(int a, int b); #endif
sum.c/sum.cpp文件
#include "sum.h"
int sum(int a, int b)
{
return a + b;
}
main.c/main.cpp文件
#include "sum.h"
int main()
{
int a = 10;
int b = 20;
int c = sum(a , b);
return 0;
}
下面是多个文件重复使用一个头文件的编译链接期间的逻辑图:



