预编译指令帮你提升工作效率!
预编译指令防止头文件重复引用
为什么防止头文件重复引用?
头文件重复引用会报错吗?
其实头文件的重复引用大多数情况下不会出现错误。那什么情况会出错呢?
小二,直接上代码!
好嘞,客官您慢用!
5个文件分别是a.h,a.c,b.h,b.c和hello.c。在hello中为了使用a.c和b.c分别加入a.h和b.h的头文件。如下:
//a.h
int num=3;
void a();
//a.c
#include<stdio.h>
#include"a.h"
void a(){
printf("a\n");
}
//b.h
#include"a.h"
void b();
//b.c
#include<stdio.h>
#include"b.h"
void b(){
printf("b\n");
}
//hello.c
#include"a.h"
#include"b.h"
#include<stdio.h>
int main(){
printf("test\n");
a();
b();
}
通过gcc查看预处理的生成文件.i。
gcc main.c -E >main.i
可以看到num被定义了两次。所以当项目逐渐复杂,在.h中引入一些变量(什么变量,有必要吗?此处应该是链接)时会发生错误。这个地方值得一提的是,如果头文件并未定义变量,多次引用并不会发生错误。也就是说多次的声明不会报错,多次的定义相同变量会报错,而预编译指令真正预防的问题是防止多次定义相同变量。(老话就是:一个变量可以被声明多次但是不能被多次定义)
关于全局变量(此处应该是链接)
如果头文件只被声明一次,那么也就不存在被多次定义的问题了。预编译指令使每个头文件只被声明一次,避免了相同变量被多次定义的问题。使用方法:
在*.h中加入代码:
#ifndef A_H
#define A_H
#endif