包含斜杠的#include语句(头文件由两部分组成)

时间:2010-03-11 05:34:20

标签: c

有时我会看到表单的头文件。

#include <sys/sysinfo.h> // I found this on my system under /usr/include/sys/sysinfo.h. Is that all the "sys/" means?                                                             

这叫做什么,为什么这些头文件与大多数其他头文件不同,如

#include <stdio.h>

也许一组相关的头文件被分组在'sys'的标签下,但如果我尝试类似“man pci”的东西(/ usr / include / sys /中有一个pci.h头文件,则没有条目。

3 个答案:

答案 0 :(得分:8)

这是向头文件提供一些“命名空间结构”的便捷方式。在Unix世界中,主要部分位于像<stdio.h>之类的标题之间,它们通常相当通用,主要供用户程序使用,主要不供操作系统内核使用。相比之下,像<sys/sysinfo.h><sys/types.h>这样的标题是在编译内核时使用的 - 它们更像是系统的。

如今,它提供了一种将项目标题与另一个项目标题分开的方法。例如,<openssl/ssl.h>将标头标识为属于OpenSSL代码库。

我不知道这种指定标题的方式有一个特定的名称。

请注意,如果OpenSSL标头存储在目录/usr/local/include/openssl中,则在编译器命令行中指定-I /usr/local/include。实际发生的是通过在尖括号中用多个标准目录之一前缀名称来查找标题,其中默认值为/usr/include。因此,在<stdio.h>中找到了/usr/include/stdio.h,在<sys/sysinfo.h>等中找到了/usr/include/sys/sysinfo.h

答案 1 :(得分:2)

它们仍然是标题,但它们并不直接位于默认搜索路径中。这通常是针对来自第三方库的标头进行的,以使它们与库存libc标题分开。

答案 2 :(得分:2)

它与预处理器的工作方式有关。如果您的预处理器在/usr/include/中查找,那么您需要sys/sysinfo.h。如果您的预处理器在/usr/include/sys/中查找,那么您只需要sysinfo.h

尝试使用-I-l选项

来玩gcc

编辑:那些应该是大写字母i和小写字母L