传统上,避免在 C++ 中包含多个头文件的标准和可移植方法是使用 #ifndef - #define - #endif 预编译器指令方案,也称为 macro-guard scheme(参见下面的代码片段)。

#ifndef MY_HEADER_HPP
#define MY_HEADER_HPP
...
#endif

然而,在大多数实现/编译器(见下图)中,有一个更“优雅”的替代方案,其用途与名为 #pragma once 的宏保护方案相同。与宏保护方案相比,#pragma once 有几个优点,包括更少的代码、避免名称冲突,有时还提高了编译速度。

c++ - #pragma 曾经是 C++11 标准的一部分吗?-LMLPHP

做了一些研究,我意识到虽然 #pragma once 指令几乎被所有已知的编译器支持,但关于 #pragma once 指令是否是 C++11 标准的一部分还不清楚。

问题:
  • 有人能澄清一下 #pragma once 指令是否是 C++11 标准的一部分吗?
  • 如果它不是 C++11 标准的一部分,是否有计划将其包含在以后的版本中(例如,C++14 或更高版本)?
  • 如果有人能进一步详细说明使用其中一种技术的优缺点(即宏保护与 #pragma once ),那也很好。
  • 最佳答案

    #pragma once 不是标准的。这是一个广泛的(但不是
    通用)扩展,可以使用

  • 如果您对便携性的关注有限,以及
  • 您可以确保所有包含文件始终位于本地磁盘上。

  • 它被考虑用于标准化,但被拒绝,因为它
    不能可靠地实现。 (问题发生在你
    可以通过几个不同的远程安装访问文件。)

    确保没有包含守卫是相当容易的
    单一开发中的冲突。对于图书馆,可能
    被许多不同的开发使用,显​​而易见的解决方案是
    为包含守卫生成大量随机字符
    当你创建它时。 (可以设置一个好的编辑器来为
    每当你打开一个新的标题。)但即使没有这个,
    我还没有遇到任何冲突的问题
    图书馆。

    关于c++ - #pragma 曾经是 C++11 标准的一部分吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23696115/

    10-14 23:59