为什么/usr/include/linux/stddef.h是空的?

时间:2015-07-08 06:41:42

标签: c linux header-files

此头文件应定义NULLsize_t以及其他宏,但我发现/usr/include/linux/stddef.h为空?为什么呢?

1 个答案:

答案 0 :(得分:12)

标头的实际位置是实现定义的。您所看到的并不是gcc中包含的典型<stddef.h>。您可以通过以下方式找到系统的确切位置:

gcc -E - <<<'#include<stddef.h>' | grep stddef.h

相当于在空C文件中包含标头<stddef.h>并在其上运行gcc -E

/usr/include/linux中的标头用于编译C库(通常是Linux上的glibc)。 GNU manual说:

  

linux asm asm-generic 目录是必需的   使用GNU C库编译程序;其他目录   描述内核的接口,但如果不是,则不需要   使用这些接口编译程序。你不需要复制   如果您未指定备用内核头,则为内核头   来源使用'--with-headers'。

而C库标题通常放在/usr/lib/中的某个位置。在我的ubuntu 15.04上,标题/usr/include/linux/stddef.h为空。但在我的CentOS上,它有:

#ifndef _LINUX_STDDEF_H
#define _LINUX_STDDEF_H

#undef NULL
#if defined(__cplusplus)
#define NULL 0
#else
#define NULL ((void *)0)
#endif

#endif

底线是,这不是您感兴趣的stddef.h,一般情况下,您不应对标准头文件的位置做任何假设。