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"中所有的内容。
时间: 2024-10-29 05:07:59