重複包含標頭檔案的問題

2021-10-22 00:04:33 字數 1125 閱讀 5624

在每個標頭檔案的最前端和最後端加以下**

#ifndef __***_x 

//其中__***_x為唯一的標誌符

#define __***_x..

....

...#endif

條件編譯,解決的是標頭檔案重複包含的問題

比如:a.h

b.h //這個b.h是包含a.h的

#include 「a.h」

#include 「b.h」

如果預處理階段,寫成這樣,實際上a.h就會插入兩次了,編譯的時候容易會報錯

要想不出現這種情況,可以在a.h裡加上條件編譯**

#ifndef __a_h

#define __a_h

… //原來a.h的內容

#endif

原理:在文字插入後,會再做巨集的判斷

第1次展開

#ifndef __a_h 

//第1次,會先判斷巨集是否存在

#define __a_h

//如不存在,則建立巨集,並引入巨集名後的內容(巨集體)

//很明顯是不存在,條件滿足,走

#define..

..//原來a.h的內容

#endif

第2次展開,因為重複定義了,會有下面這個**

#ifndef __a_h

#define __a_h..

..//原來a.h的內容

#endif

//而上面巨集已經建立了,條件已經不滿足,走#endif後面的**

示例:

#ifndef x

//先測試x是否被巨集定義過

#define x

程式段1

//如果x沒有被巨集定義過,定義x,並編譯程式段 1

#endif

程式段2

//如果x已經定義過了則編譯程式段2的語句,「忽視」程式段 1

#ifndef #define #endif的作用,相當於當第二次重複展開的時候,不會把a.h裡的內容插入到.c的main檔案裡面,防止標頭檔案的重複包含和編譯而導致報錯

標頭檔案重複包含

如果某個標頭檔案被多次包含,則在vc編譯器中編譯,會丟擲 重複定義 錯誤。為了避免同乙個檔案被重複包含多次,c 提出了2種解決方案。1 ifndef some file h define some file h endif 在檔案末端 2 pragma one ifndef define endif...

標頭檔案重複包含

如果某個標頭檔案被多次包含,則在vc編譯器中編譯,會丟擲 重複定義 錯誤。為了避免同乙個檔案被重複包含多次,c 提出了2種解決方案。1 ifndef some file h define some file h endif 在檔案末端 2 pragma one ifndef define endif...

防止標頭檔案重複包含

在程式設計中,經常會遇到這種情況,我們的某乙個程式會呼叫多個dll,因此需要包含多個標頭檔案,不同的標頭檔案可能包含了相同某乙個下一級標頭檔案,這就可能會導致標頭檔案的重複包含,從而導致變數 函式的重定義等等,為了解決這個問題,就要求我們在編寫dll的時候,使用 ifndef define endi...