#pragma曾经在头部守卫中出现的原因是什么?

dub*_*nde 18 c++ boost pragma header-files c-preprocessor

刚见过这里面 <boost/asio.hpp>

#ifndef BOOST_ASIO_HPP
#define BOOST_ASIO_HPP

#if defined(_MSC_VER) && (_MSC_VER >= 1200)
# pragma once
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)

/// ....

#endif // BOOST_ASIO_HPP
Run Code Online (Sandbox Code Playgroud)

无视_MSC_VER预处理器检查,#pragma once在这种情况下有什么好处?在所有情况下以及在所有平台上,预处理器头部保护是否都不能确保头部内容只有included一次?

Aoi*_*asu 21

#pragma once指定编译源代码文件时编译器包含(打开)一次文件.这可以减少构建时间,因为编译器不会在第一个#include模块之后打开和读取文件.

如果不这样做#pragma once,则每次需要都会打开该文件#ifndef BOOST_ASIO_HPP,如果已定义,编译器将停止解析它.