Visual Studio stl 数字实现中的双标头保护

Posted

技术标签:

【中文标题】Visual Studio stl 数字实现中的双标头保护【英文标题】:Double header guards in Visual Studio stl numeric implementation 【发布时间】:2020-05-29 10:54:50 【问题描述】:

在 Visual Studio 12.0 附带的 stl 实现中,numeric 标头如下所示

#pragma once
#ifndef _NUMERIC_
#define _NUMERIC_

// shortened for the sake of readibility
. 
.
.


#endif /* _NUMERIC_ */

我知道#pragma once 不是standard conform。

尽管如此,他们为什么要实施双标头保护?

【问题讨论】:

【参考方案1】:

#pragma once: 同一个文件不会被多次包含 include guard idiom:使用预处理器宏定义来防止文件内容的多次包含。

根据Doc

同时使用 include guard#pragma once 在同一个文件中。编译器识别包含保护习语,并以相同的方式实现多重包含优化 如果没有非注释代码或#pragma once 指令的方式 预处理器指令出现在标准形式之前或之后 成语

我建议你可以参考链接:https://***.com/a/13339535/11872808

【讨论】:

以上是关于Visual Studio stl 数字实现中的双标头保护的主要内容,如果未能解决你的问题,请参考以下文章

哪些编译器选项用于在 Visual Studio 中编译 C++ STL 类/函数?

Visual Studio 2019 STL 包含错误

在 Visual Studio 中编写 MFC/STL 程序需要做啥?

在 Visual Studio 调试模式下“浅”显示 STL 容器?

在 Visual Studio 2012 中调试 C++ 代码时跳过 STL 代码?

在 Visual Studio 2017 中使用 3D Wavefront OBJ / STL