传统上,避免在 C++ 中包含多个头文件的标准和可移植方法是使用 #ifndef - #define - #endif
预编译器指令方案,也称为 macro-guard scheme(参见下面的代码片段)。
#ifndef MY_HEADER_HPP
#define MY_HEADER_HPP
...
#endif
然而,在大多数实现/编译器(见下图)中,有一个更“优雅”的替代方案,其用途与名为
#pragma once
的宏保护方案相同。与宏保护方案相比,#pragma once
有几个优点,包括更少的代码、避免名称冲突,有时还提高了编译速度。做了一些研究,我意识到虽然
#pragma once
指令几乎被所有已知的编译器支持,但关于 #pragma once
指令是否是 C++11 标准的一部分还不清楚。问题:
#pragma once
指令是否是 C++11 标准的一部分吗? #pragma once
),那也很好。 最佳答案
#pragma once
不是标准的。这是一个广泛的(但不是
通用)扩展,可以使用
它被考虑用于标准化,但被拒绝,因为它
不能可靠地实现。 (问题发生在你
可以通过几个不同的远程安装访问文件。)
确保没有包含守卫是相当容易的
单一开发中的冲突。对于图书馆,可能
被许多不同的开发使用,显而易见的解决方案是
为包含守卫生成大量随机字符
当你创建它时。 (可以设置一个好的编辑器来为
每当你打开一个新的标题。)但即使没有这个,
我还没有遇到任何冲突的问题
图书馆。
关于c++ - #pragma 曾经是 C++11 标准的一部分吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23696115/