1. 程式人生 > >初夏小談:C/C++防止標頭檔案被重複包含的兩種方法及區別

初夏小談:C/C++防止標頭檔案被重複包含的兩種方法及區別

防止標頭檔案被重複包含的兩種方式

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  標頭檔案只被開啟一次,執行效率較高,不用考慮巨集名。但受編譯器的限制。

                                                                                                                                                                     

      珍&原始碼