跳轉到內容

更多 C++ 慣用法/包含守衛宏

來自華夏公益教科書,開放的書籍,構建開放的世界

包含守衛宏

[編輯 | 編輯原始碼]

允許多次包含標頭檔案。

也稱為

[編輯 | 編輯原始碼]

在同一個編譯單元中多次包含相同標頭檔案會導致違反 C++ 的基本規則:單定義規則 (ODR)。由於直接和間接包含,標頭檔案可能會被多次包含。

解決方案和示例程式碼

[編輯 | 編輯原始碼]

包含守衛宏慣用法是一個古老的慣用法,也適用於 C 程式。它使用簡單的 #define 來允許在編譯單元中多次包含標頭檔案。該慣用法確保在預處理後,標頭檔案中的受保護內容只被編譯器看到一次。更準確地說,編譯器在標頭檔案第一次被包含的地方看到受保護的內容。以下宏被放置在標頭檔案的開頭和結尾

#ifndef MYHEADER_H_ // beginning
#define MYHEADER_H_ 
...
#endif // MYHEADER_H_ // end

注意
程式設計師通常讓他們的包含守衛宏以一個或多個下劃線開頭,後面跟著大寫字母,即使根據 C++ 標準 (ISO/IEC 14882:2003),此類識別符號正式保留給編譯器和標準庫的實現。

一些編譯器支援

#pragma once

作為包含守衛的有效替代方案。它不需要像一些編譯器中的傳統包含守衛宏那樣多次開啟標頭檔案。在許多現代編譯器(如 GCC4 或 MSC++2008)上,#pragma once 不會帶來更好的編譯時間效能,因為它們會識別標頭檔案守衛。

已知用途

[編輯 | 編輯原始碼]

實際上世界上所有的標頭檔案!

[編輯 | 編輯原始碼]

參考文獻

[編輯 | 編輯原始碼]

#pragma once 在維基百科。

華夏公益教科書