引自Microsoft documentation,There is no advantage to use of both the #include guard idiom and #pragma once in the same file.
关于stackoverflow的先前相关问题的答案也证实了两者都没有意义。见下文,例如:
然而,boost
库的vector.hpp
文件从此开始:
#ifndef BOOST_ASSIGN_STD_VECTOR_HPP
#define BOOST_ASSIGN_STD_VECTOR_HPP
#if defined(_MSC_VER)
# pragma once
#endif
...
#endif
也就是说,它既包括守护成语,也包括一次pragma。升压头文件有两个原因吗?
答案 0 :(得分:2)
从技术上讲,#pragma once
不是标准的C ++,而是标题保护。如果你们两个都有,他们就不会互相冲突。
如#if defined(_MSC_VER)
所暗示的那样,提升可能同时具有两个原因的原因是,如果您不使用MSVC,那么您需要某些来充当您的头部防护,因此他们又回到了另一种方法。
由于boost努力跨平台,他们正在努力确保他们的代码适用于不支持#pragma once
的编译器,尽管我能想到的所有大型现代编译器都支持它,如enumerated on wikipedia