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 classadd dialogadd windows 嚮導生成。因此,在 C++ Windows 申請人中找到它們是很常見的。