c++ - #pragma 一次位置 : before or after #include's

标签 c++ pragma

在现有代码中,我看到 #pragma once 在 header #includes

之后使用
//Some_Header.h
#include "header1.h"
#include "header2.h"

#pragma once

//implementations

代替

//Some_Header.h
#pragma once

#include "header1.h"
#include "header2.h"

//implementations

我认为它总是需要像第二个示例一样,您的 #pragma once 是在哪里定义的,还是预处理器在文件中的任何位置提取它是否重要?

编辑

我知道 #pragma once 不是标准的一部分,包括 guard 是,但这不是我的问题。

最佳答案

#pragma once 应该放在包含任何标题之前。 Argument of #pragma directive is a subject to macro expansion.因此包含的 header 的内容可以改变编译指示行为:

// whatever.hpp
...
#define once lol_no

// your_header.hpp
#include "whatever.hpp"

#pragma once // warning C4068: unknown pragma

关于c++ - #pragma 一次位置 : before or after #include's,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43492485/

相关文章:

c++ - boost::interprocess::scoped_lock 应用程序在锁内崩溃

c - 启用 HANDLE_PRAGMA_PACK_WITH_EXPANSION

c++ - C 函数从 iOS 设备设置中查找 iOS 用户 12/24 小时偏好

C++ bool 运算符==

c++ - CLion(和其他 IDE?)的 "#pragma ide diagnostic ignored"列表

c - #pragma once 在 C 语言中是什么意思?

c++ - 如何在msvc中强制返回值优化

c - 告诉 gcc 专门展开一个循环

没有默认构造函数的 C++ 私有(private)变量 - 无法编译?

c++ - 无法在 QT C++ 中覆盖 VideoWidget paintEvent()