传统上,在C++中避免多个头文件包含的标准和便携方法是使用预处理器指令方案,也称为宏保护方案(见下面的代码片段),其中包括#ifndef-#define-#endif。请注意,保留HTML标签。
在大多数实现/编译器中(见下图),有一种更“优雅”的替代宏防护方案的选择,称为
#ifndef MY_HEADER_HPP
#define MY_HEADER_HPP
...
#endif
在大多数实现/编译器中(见下图),有一种更“优雅”的替代宏防护方案的选择,称为
#pragma once
。与宏防护方案相比,#pragma once
具有几个优点,包括更少的代码、避免名称冲突以及有时提高编译速度。
在做一些研究后,我发现虽然几乎所有已知的编译器都支持#pragma once
指令,但对于#pragma once
指令是否是C++11标准的一部分还存在一些不清晰的问题。
问题:
- 请问有人能澄清
#pragma once
指令是否是C++11标准的一部分吗? - 如果它不是C++11标准的一部分,是否有计划在以后的版本(例如C++14或更高版本)中包含它?
- 如果有人能进一步阐述使用宏保护和
#pragma once
两种技术的优缺点,那就太好了。
#pragma once
通常不起作用。 - AliciaBytes