pragma 一次
大多數(但不是全部)C++實現支援 #pragma once
指令,該指令確保檔案僅在單個編譯中包含一次。它不是任何 ISO C++標準的一部分。例如:
// Foo.h
#pragma once
class Foo
{
};
雖然 #pragma once
避免了與包含守衛相關的一些問題,但是根據標準的定義,#pragma
本質上是一個特定於編譯器的鉤子,並且將被不支援它的編譯器默默地忽略。使用 #pragma once
的專案必須修改為符合標準。
對於一些編譯器 - 特別是那些使用預編譯頭的編譯器 - #pragma once
可以大大加快編譯過程。類似地,一些前處理器通過跟蹤哪些頭部包括防護來實現編譯的加速。當使用 #pragma once
和 include guard 時,淨收益取決於實現,可以是編譯時間的增加或減少。
在 Windows 上編寫基於 MFC 的應用程式時,#pragma once
與包含警衛相結合是標頭檔案的推薦佈局,由 Visual Studio 的 add class
,add dialog
,add windows
嚮導生成。因此,在 C++ Windows 申請人中找到它們是很常見的。