初夏小談:C/C++防止標頭檔案被重複包含的兩種方法及區別
阿新 • • 發佈:2018-11-25
防止標頭檔案被重複包含的兩種方式:
1.條件編譯的巨集
2.#pragma once
先來說說第一種:
#ifndef __HEADNAME__H__
#define __HEADNAME__H__
//...
//標頭檔案
#endif
C/C++標準支援#ifndef的方式,當頭檔案第一次被包含時正常處理 _HEADNAME__H__ 被定為1,當再次包含相同標頭檔案時就會被忽略,但預處理時仍會將標頭檔案讀入加長編譯時間。_HEADNAME_H__會被改為包含的標頭檔案名。以防衝突。它不但可以保證同一個檔案不會被包含多次,也能保證內容完全相同的兩個檔案不會被同時包含。。假如巨集名相同會引發衝突,找不到宣告的問題。
再說說第二種:
//#pragma once
//...
//標頭檔案
#pragma once 也是防止標頭檔案被重複包含,它所指的檔案時物理上的一個檔案,而不是內容相同的兩個檔案。但有檔案被多份拷貝,不能保證不被重複包含。它受編譯器的限制。有的不支援。
二者區別:
巨集定義:有先天優勢,和標準與生俱來 ,可移植性強。但多要考慮巨集名。
#pragma once 標頭檔案只被開啟一次,執行效率較高,不用考慮巨集名。但受編譯器的限制。
珍&原始碼