此头文件应定义NULL
或size_t
以及其他宏,但我发现/usr/include/linux/stddef.h
为空?为什么呢?
答案 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
,一般情况下,您不应对标准头文件的位置做任何假设。