【问题标题】:#pragma once position: before or after #include's [duplicate]#pragma once 位置:在 #include 之前或之后 [重复]
【发布时间】:2017-09-15 11:48:01
【问题描述】:

在现有代码中,我看到 #pragma once 在标头 #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 不是标准的一部分,包括警卫,但这不是我的问题。

【问题讨论】:

  • 请记住,尽管各种编译器广泛支持此功能,但它并不是标准 C++ 的一部分。
  • 我知道无数关于这个问题的文章在各地都没有得到支持,我真的找不到我想要的解释。
  • 我从不使用它,所以我不确定——但我会尽可能地把它贴在文件的开头。它只是更有意义。
  • 我也一直这样认为,它是一种包含保护的翻译,但看到这一点我想确定一下。
  • 解决重复标记:另一个问题是关于 pragma once 位置与包括警卫。这个问题讨论了一次编译指示与标题包含。所以我认为它被错误地标记了。

标签: c++ pragma


【解决方案1】:

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

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

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

#pragma once // warning C4068: unknown pragma

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    • 2018-05-07
    • 2016-09-17
    相关资源
    最近更新 更多