gpt4 book ai didi

c++ - 在同一个头文件中包含 guard 和 #pragma once

转载 作者:太空狗 更新时间:2023-10-29 21:34:21 26 4
gpt4 key购买 nike

引自Microsoft documentation , 在同一个文件中同时使用#include guard idiom 和#pragma once 没有任何优势。

之前在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

也就是说,它既包括 guard idiom 又包括 pragma once。 boost 头文件两者都有的原因是什么?

最佳答案

从技术上讲,#pragma once 不是标准的 C++,而 header 保护是。如果您同时拥有它们,它们将不会相互冲突。

正如 #if defined(_MSC_VER) 所暗示的那样,boost 可能兼具两者的原因是,如果您不使用 MSVC,那么您需要一些东西来采取行 Action 为你的头球后卫,所以他们会退回到另一种方法。

由于 boost 致力于跨平台,他们试图确保他们的代码在不支持 #pragma once 的编译器上工作,尽管我能想到的所有大型现代编译器都支持它,作为enumerated on wikipedia .

关于c++ - 在同一个头文件中包含 guard 和 #pragma once,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46891840/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com