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 申请人中找到它们是很常见的。