**
(1) #ifndef
#ifndef是最早期使用的方法,是基於語言的巨集定義名字不能衝突的前提下的。
優點:這種方法不僅能保證同乙個標頭檔案不會被包含兩次,也可以保證內容完全相同的兩個檔案也只能被包含一次。
缺點:你的#ifndef 後面跟的巨集名字和你程式中的其他巨集名字發生了」撞車「,那麼會出現嚴重後果
例子:
file1.h中
現在又有乙個檔案 book.h 裡面使用了巨集定義方式防止標頭檔案二次編譯
// codes
下面是你的主函式所在檔案內容
………………
預編譯階段把file1檔案展開,就得到了巨集 book_h,在處理book.h檔案時就發現book_h這個巨集已經存在了,就不會包含book.h標頭檔案了,這就是弊端所在了。
(2)#pragma once
缺點:(1)微軟編譯器獨有,因為他不支援跨平台。如果你想寫跨平台的**,最好使用上一種。
(2)假如你的某乙個標頭檔案有多份拷貝,這些檔案雖然在邏輯上都是一樣的,但在物理上他們卻是不同的,所以當你把這些檔案包含的時候,就會發現真的都包含進來了,然後就是編譯錯誤了。
優點:當物理上的同一檔案被巢狀包含的時候,使用第一種方法預處理會每一次開啟該檔案做判斷的,但是第二種方法則不會,所以在此#pragma once 會更快些。
兩種防止標頭檔案二次編譯的方法
ifndef是最早期使用的方法,是基於語言的巨集定義名字不能衝突的前提下的。優點 這種方法不僅能保證同乙個標頭檔案不會被包含兩次,也可以保證內容完全相同的兩個檔案也只能被包含一次。缺點 你的 ifndef 後面跟的巨集名字和你程式中的其他巨集名字發生了 撞車 那麼會出現嚴重後果 例子 file1.h...
防止標頭檔案二次編譯
一 下劃線 屬於程式設計風格的內容,對程式沒有影響。不用下劃線也可以,用幾個下劃線也由個人習慣。二 其實質是乙個巨集名。由此我們可以防止發生重複定義或宣告。假設你的頭檔名為head.h,根據習慣,我們宣告乙個巨集head h,對應這個標頭檔案,在標頭檔案中開始的地方和結尾的地方加上 對head h的...
防止標頭檔案重複包含的兩種方法及區別
1.條件編譯語句 ifndef define endif 相信很多人都知道第一種方法。ifndef test h 1 define test h 2 加入各種變數,函式宣告 endif 3以上 如果沒有定義test h變數,就繼續往下執行,如果定義了,就直接endif,即不做任何操作。如果乙個檔案中...