这个 C++ 指令做什么:“#pragma GCC system_header”?
2 回答
我用谷歌搜索并得到了这个:
#pragma GCC system_header
This pragma takes no arguments. It causes the rest of the code in the current file to be treated as if it came from a system header. Section 2.7 System Headers.
2.7. 系统头文件
声明操作系统和运行时库接口的头文件通常不能用严格符合的 C 语言编写。因此,GCC 对系统头文件中的代码进行特殊处理。在 GCC 处理系统标头时,除#warning(第 5 章诊断)生成的警告之外的所有警告都被抑制。系统标头中定义的宏在扩展时不受一些警告的影响。当我们发现由于系统头文件中定义的宏中的代码而导致警告产生大量误报时,这种豁免权是临时授予的。
通常,只有在特定目录中找到的标头才被视为系统标头。这些目录是在编译 GCC 时确定的。然而,有两种方法可以将普通头文件变成系统头文件。
-isystem 命令行选项将其参数添加到目录列表中以搜索标题,就像 -I 一样。在该目录中找到的任何标头都将被视为系统标头。
所有由 -isystem 命名的目录都在所有由 -I 命名的目录之后搜索,无论它们在命令行上的顺序是什么。如果同一目录同时由 -I 和 -isystem 命名,则忽略 -I 选项。如果使用 -v,GCC 会在发生这种情况时提供信息性消息。
还有一个指令,#pragma GCC system_header,它告诉 GCC 将当前包含文件的其余部分视为系统头,无论它是在哪里找到的。文件中#pragma 之前的代码不会受到影响。#pragma GCC system_header 在主源文件中无效。
在非常旧的系统上,一些预定义的系统头目录得到了更加特殊的处理。GNU C++ 认为这些目录中的标头中的代码被外部“C”块包围。无法使用
#pragma
, 或从命令行请求此行为。
它表示,超过这一点的所有内容都被视为在系统标头中。这意味着除了#warning 之外的所有警告都被禁止