系统标头和普通标头gcc

我知道这是一个非常愚蠢的问题,但我无法区分gcc中的系统头和普通头。

参考此链接 :

2.8系统接头

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

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

在使用-isystem和-idirafter命令行选项添加到搜索路径的目录中找到的头文件被视为用于诊断目的的系统头。 还有一个指令#pragma GCC system_header,它告诉GCC将当前包含文件的其余部分视为系统头,无论它在哪里找到。 文件中“#pragma”之前的代码不受影响。 #pragma GCC system_header对主源文件没有影响。

我很感激答案,如果可能的话,会显示系统标题的一些内容,以及在链接中讨论的是什么样的警告或特殊处理。

系统头文件是OS或编译器附带的头文件,位于Unix上的/usr/include目录中。 普通标题是其他所有内容,例如您自己编写的头文件,或者您下载的应用程序或库附带的文件。

what kind of warnings or special treatment is talking about in the link.

这些是针对C使用发出的警告,这些警告在当前标准下已弃用,但在编写系统头时被认为是可接受的。 例如,警告you are assigning a string literal to a char*" 。(现在可以使用const关键字完成)。