防止標頭檔案重複包含的兩種方法及區別

2021-09-25 09:56:14 字數 328 閱讀 3168

在編譯階段,每個檔案是分別編譯的,在編譯階段我們可以通過條件編譯的方法去防止標頭檔案重複包含,但是由於巨集是在編譯之前處理的,

即巨集的功能僅僅只能體現在編譯階段,因此#ifndef #define #endif語句只能防止編譯階段的「重複包含」錯誤。在鏈結時,由於鏈結器的作用是將編譯器生成的.obj檔案鏈結起來並生成最終可執行檔案,因此鏈結器的作用範圍是「檔案之間」。不會再去處理巨集預處理指令,所以條件編譯這個方法只能在編譯階段防止重複包含,如果在標頭檔案中進行了定義,即使用了條件編譯語句,在鏈結的時候也會報重定義錯誤。

其實只要在標頭檔案進行宣告,不進行定義,就不會出錯。因為定義不能定義兩次,但是宣告可以宣告多次。

防止標頭檔案重複包含的兩種方法及區別

1.條件編譯語句 ifndef define endif 相信很多人都知道第一種方法。ifndef test h 1 define test h 2 加入各種變數,函式宣告 endif 3以上 如果沒有定義test h變數,就繼續往下執行,如果定義了,就直接endif,即不做任何操作。如果乙個檔案中...

防止標頭檔案重複包含方法

編譯器支援 標準未定義 由編譯器保證不會重複包含物理上的同乙個檔案 ifndef test.h define test.h code endif 條件編譯是標準支援的 因為標準支援 define定義的識別符號 不會重複引入同名的檔案 存在不小心寫錯define識別符號導致重複引入的問題 所以有些c標...

防止標頭檔案重複包含

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