一些资料上说在头文件加上类似下面的语句就能防止头文件重复调用:
#ifndef _TEST_H_
#define _TEST_H_
…… //头文件内容
#endif
不是很明白,按照我的理解,如果之前没有定义过“_TEST_H_”,如上的条件编译会让整个头文件失效。另外头文件什么情况下会被重复调用,有什么后果?
第一次调用,没定义过_TEST_H_,就会定义_TEST_H_ 然后头文件被调用
如果还有调用,_TEST_H_已被第一次定义,自动就跳过了
假设头文件被重复调用,会对系统有什么样的影响?
有两个影响:
1. 在此头文件中的变量或者宏定义会被重复定义(有时导致编译出错)
2. 影响编译预处理速度
如果头文件被重复引用多导致很多宏定义被重复定义#define
比如,有一个头文件为 test.h
其中有一个宏定义 #define TEST_MACRO 0x1234
如果另一个头文件 test1.h和test2.h都包含了test.h
而test1.h和test2.h又同时在一个.c文件中使用,那么就会有重复调用的情况,就会对test.h文件进行多次展开,影响预处理的效率(多预处理了一次test.h)
点击打开链接 http://www.cnblogs.com/rollenholt/archive/2012/03/20/2409046.html (详细的介绍)