在每個標頭檔案的最前端和最後端加以下**
條件編譯,解決的是標頭檔案重複包含的問題#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次展開
第2次展開,因為重複定義了,會有下面這個**#ifndef __a_h
//第1次,會先判斷巨集是否存在
#define __a_h
//如不存在,則建立巨集,並引入巨集名後的內容(巨集體)
//很明顯是不存在,條件滿足,走
#define..
..//原來a.h的內容
#endif
#ifndef __a_h
#define __a_h..
..//原來a.h的內容
#endif
//而上面巨集已經建立了,條件已經不滿足,走#endif後面的**
#ifndef #define #endif的作用,相當於當第二次重複展開的時候,不會把a.h裡的內容插入到.c的main檔案裡面,防止標頭檔案的重複包含和編譯而導致報錯示例:
#ifndef x
//先測試x是否被巨集定義過
#define x
程式段1
//如果x沒有被巨集定義過,定義x,並編譯程式段 1
#endif
程式段2
//如果x已經定義過了則編譯程式段2的語句,「忽視」程式段 1
標頭檔案重複包含
如果某個標頭檔案被多次包含,則在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...