在同一个头文件中包含guard和#pragma一次

时间:2017-10-23 14:27:41

标签: c++ boost

引自Microsoft documentationThere is no advantage to use of both the #include guard idiom and #pragma once in the same file.

关于stackoverflow的先前相关问题的答案也证实了两者都没有意义。见下文,例如:

Header guards and pragma once

然而,boost库的vector.hpp文件从此开始:

#ifndef BOOST_ASSIGN_STD_VECTOR_HPP
#define BOOST_ASSIGN_STD_VECTOR_HPP

#if defined(_MSC_VER)
# pragma once
#endif
...
#endif

也就是说,它既包括守护成语,也包括一次pragma。升压头文件有两个原因吗?

1 个答案:

答案 0 :(得分:2)

从技术上讲,#pragma once不是标准的C ++,而是标题保护。如果你们两个都有,他们就不会互相冲突。

#if defined(_MSC_VER)所暗示的那样,提升可能同时具有两个原因的原因是,如果您不使用MSVC,那么您需要某些来充当您的头部防护,因此他们又回到了另一种方法。

由于boost努力跨平台,他们正在努力确保他们的代码适用于不支持#pragma once的编译器,尽管我能想到的所有大型现代编译器都支持它,如enumerated on wikipedia