header 文件中的 `#pragma GCC system_header` 是否扩展到另一个源或包含它的 header 文件?

Does `#pragma GCC system_header` in a header file extend into another source or header file that includes it?

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

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

写着:

All warnings, other than those generated by #warning, are suppressed while GCC is processing a system header. Macros defined in a system header are immune to a few warnings wherever they are expanded.

There is also a directive, #pragma GCC system_header, which tells GCC to consider the rest of the current include file a system header, no matter where it was found. Code that comes before the #pragma in the file will not be affected. #pragma GCC system_header has no effect in the primary source file.

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

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

我想知道,如果我将 #pragma GCC system_header 放在 单个 header 文件中,那个 #pragma 指令的效果会怎样被转移到任何包含 header 的文件中?因为我不想禁用包含此 header 文件的文件中的任何警告。我只想禁用结构 的警告,这些结构仅在 header 文件 .

中定义

换句话说,#pragma GCC system_header 的效果是适用于整个翻译单元(我不想要那个)还是仅适用于单个 header 文件,就像在文本编辑器中一样?

只是对主要规则的重申:

There is also a directive, #pragma GCC system_header, which tells GCC to consider the rest of the current include file a system header

就是这样。不是其他headers,不是你写的那个文件#include.

就是那个文件。