C++编译指示GCC system_header指令

4 c++ gcc pragma

这个C++指令的作用是什么:"#pragma GCC system_header"?

Tim*_*Tim 20

我用Google搜索并得到了这个:

#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.
Run Code Online (Sandbox Code Playgroud)

有关系统标头的更多信息

2.7.系统标题

声明操作系统和运行时库接口的头文件通常不能严格符合C语言编写.因此,GCC会在系统头文件中给出代码特殊处理.除了#warning(第5章诊断)生成的警告之外的所有警告都会在GCC处理系统标头时被抑制.系统标题中定义的宏在任何扩展的位置都不受几个警告的影响.当我们发现警告由于系统头中定义的宏中的代码而产生大量误报时,会临时授予此免疫权.

通常,只有特定目录中的标头才被视为系统标头.这些目录是在编译GCC时确定的.但是,有两种方法可以将普通标头放入系统标头中.

-isystem命令行选项将其参数添加到目录列表以搜索标头,就像-I一样.在该目录中找到的任何标头都将被视为系统标头.

在-I命名的所有目录之后搜索-isystem命名的所有目录,无论它们在命令行上的顺序如何.如果同一目录由-I和-isystem命名,则忽略-I选项.如果使用-v,GCC会在发生这种情况时提供信息性消息.

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

在非常古老的系统上,一些预定义的系统头目录得到了更加特殊的处理.GNU C++认为在这些目录中找到的标题中的代码被extern"C"块包围.无法使用a #pragma或命令行请求此行为 .

  • 我鸭鸭去并得到了这个页面。 (3认同)

pli*_*nth 6

它说过去这一点的所有内容都被视为系统标题中的内容.这意味着除了#warning之外的所有警告都被禁止