系统标头和普通标头gcc

时间:2017-01-16 22:03:11

标签: c gcc header operating-system header-files

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

参考此link

  

2.8系统标题

     

头文件声明与操作系统和的接口   运行时库通常不能严格遵循C.   因此, GCC会在系统标题特殊处理中找到代码。   所有警告,除了'#warning'生成的警告(请参阅   诊断)在GCC处理系统头时被抑制。   系统头中定义的宏不受少量警告的影响   他们扩展的地方。这种免疫力是临时授予的   当我们发现警告产生大量误报时   因为系统标题中定义的宏中的代码。

     

通常,只有特定目录中的标题是   考虑系统标题。这些目录是在GCC时确定的   编译。但是,有两种方法可以将普通标题放入   系统标题:

     

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

我很感激答案显示系统标题的一些内容(如果可能)以及链接中正在讨论的警告或特殊处理方式。

2 个答案:

答案 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关键字完成。)