【问题标题】:Does `#pragma GCC system_header` in a header file extend into another source or header file that includes it?头文件中的 `#pragma GCC system_header` 是否扩展到包含它的另一个源文件或头文件?
【发布时间】:2021-03-29 14:01:39
【问题描述】:

我需要禁用某个头文件中的所有警告,并且只禁用该文件。 我的编译器版本是g++-4.8。我必须使用那个编译器。

我查阅了该编译器的文档: g++-4.8 documentation support for System-Headers

是这样写的:

除#warning 生成的警告外,所有警告都会在 GCC 处理系统标头时被抑制。系统标头中定义的宏在展开时不会受到一些警告的影响。

还有一个指令,#pragma GCC system_header,它告诉 GCC 将当前包含文件的其余部分视为系统头,无论它是在哪里找到的。文件中#pragma 之前的代码不会受到影响。 #pragma GCC system_header 在主源文件中无效。

由于英语是我的第二语言,我不清楚最后一句话是什么意思。

我想禁用整个 single 头文件中的所有警告。此头文件包含在许多不同的 C++ 源代码文件*.cpp 中。这个头文件也被其他几个头文件*.h所包含,而那些头文件也被其他文件所包含。

我想知道,如果我将#pragma GCC system_header 放在single 头文件中,那么#pragma 指令的效果是否会转移到包含该头文件的任何文件中?因为我不想禁用包含此头文件的文件中的任何警告。我只想对在该头文件中定义的结构禁用警告。

也就是说,#pragma GCC system_header 的效果是适用于整个翻译单元(我不希望这样)还是仅适用于文本编辑器中的单个头文件?

【问题讨论】:

    标签: c++ gcc preprocessor translation-unit


    【解决方案1】:

    这只是对主要规则的重申:

    还有一个指令,#pragma GCC system_header,它告诉 GCC 将当前包含文件的其余部分视为系统头

    就是这样。不是其他标题,不是你写#include的文件。

    就是那个文件。

    【讨论】:

    • 谢谢您解释或确认这一点。我认为文档有点模糊。
    猜你喜欢
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多