为什么要避免头文件重复包含呢?
1.我们知道在编译c或c++程序时候,编译器首先要对程序进行预处理,预处理其中一项工作便是将你源程序中#include的头文件完整的展开,如果你有意或无意的多次包含相同的头文件,会导致编译器在后面的编译步骤多次编译该头文件,工程代码量小还好,工程量一大会使整个项目编译速度变的缓慢,后期的维护修改变得困难。
2.第一点讲的头文件重复包含的坏处其实还能忍,毕竟现在计算机运算能力已经不是早些时候那么慢了。但是头文件重复包含带来的最大坏处是会使程序在编译链接的时候崩溃,这是我们无法容忍的。
来看个例子:
//a.h
#include
int A=1;
//b.h
#include "a.h"
void f(){printf("%d",A);}
//main.c
#include
#include"a.h"
#include"b.h"
void main(){f();}
此时输入gcc -c main.c进行编译,会提示A重复定义,程序崩溃:
然后输入gcc -E main.c -o main.i看下预处理内容:
可以看到6015行和6021行重复出现int A=1;的定义,违背了一次定义的原则,所以会出错。
网友评论