我知道这是一个非常愚蠢的问题,但我无法区分gcc中的系统头和普通头。
参考此link:
2.8系统标题
头文件声明与操作系统和的接口 运行时库通常不能严格遵循C. 因此, GCC会在系统标题特殊处理中找到代码。 所有警告,除了'#warning'生成的警告(请参阅 诊断)在GCC处理系统头时被抑制。 系统头中定义的宏不受少量警告的影响 他们扩展的地方。这种免疫力是临时授予的 当我们发现警告产生大量误报时 因为系统标题中定义的宏中的代码。
通常,只有特定目录中的标题是 考虑系统标题。这些目录是在GCC时确定的 编译。但是,有两种方法可以将普通标题放入 系统标题:
使用-isystem和-idirafter命令行选项添加到搜索路径的目录中找到的头文件被视为系统 用于诊断的标头。 还有一个指令#pragma GCC system_header,它告诉GCC将当前包含文件的其余部分视为系统头, 无论它在哪里被发现。在'#pragma'之前的代码 该文件不受影响。 #pragma GCC system_header没有效果 主要的源文件。
我很感激答案显示系统标题的一些内容(如果可能)以及链接中正在讨论的警告或特殊处理方式。
答案 0 :(得分:1)
系统头是OS或编译器附带的头文件,位于Unix上的/usr/include
目录中。普通标题是其他所有标题,例如您自己编写的标题文件,或者您下载的应用程序或库附带的文件。
答案 1 :(得分:0)
what kind of warnings or special treatment is talking about in the link.
这些是针对C使用发出的警告,这些警告在当前标准下已弃用,但在编写系统标头时被认为是可接受的。例如,警告you are assigning a string literal to a char*"
。 (现在可以使用const
关键字完成。)