首页 > 代码库 > 关于C/C++头文件重复定义的思考
关于C/C++头文件重复定义的思考
1.什么叫重复定义
我们在写大型项目的时候,文件多,关系复杂。往往会引起头文件重复定义的问题。
什么叫头文件重复定义呢?
举个最简单的例子:
有一个头文件"c.h",在"a.h"中存在两次对"c.h"头文件的引用。在"a.h"中有如下语句:
<span style="font-size:18px;">#include "c.h" #include "c.h"</span>
出现这样的幼稚的错误可能有两种原因,第一种就是你不小心手一抖将"ch.h"少些了。或者是你只是好奇,写了两个。第二种是最不容易察觉到的,就是在调用其他头文件中重复调用了"c.h"。工程中调用错综复杂,不小心调用了两次是很容易发生的。
如"b.h"的头文件中有:
#include "c.h"
"a.h"同时引用了"c.h"和"b.h"即:
#include "b.h" #include "c.h"
2.如何解决重复定义
解决重复第一个的一个好办法是每一个头文件前都加入#ifndef #define...#endif的宏定义。如头文件"c.h"写成如下形式。
#ifndef C_H #define C_H /* c.h中所有内容,!注意这里是所有内容 */ #endif</span>
3. 为什么能解决重复定义的问题?
为什么这样做能解决重复引用的问题呢?比如上面举的第二种情况的例子,“a.h”首先引用"b.h","b.h"中调用”c.h“。第一次没有定义C_H的宏,引用"c.h"成功。第二次引用"c.h"时,由于已经定义了C_H,将不再会引用"c.h"。这样就很好的解决了重复引用的问题。
!注意1 有养成习惯每一个头文件都加这样一个宏定义。
!注意2 宏定义#define C_H下面的内容是原来的"c.h"中所有的内容。
关于C/C++头文件重复定义的思考
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。