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

Asu*_*uka 10 c linux header-files

这个头文件应该定义NULLsize_t其他宏,但我发现它/usr/include/linux/stddef.h是空的?为什么?

P.P*_*.P. 12

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

gcc -E - <<<'#include<stddef.h>' | grep stddef.h
Run Code Online (Sandbox Code Playgroud)

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

头文件/usr/include/linux用于编译C库(通常是Linux上的glibc).在GNU手册说:

linux下,ASMASM-通用目录需要编译使用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
Run Code Online (Sandbox Code Playgroud)

底线是,这不是stddef.h你感兴趣的,一般来说,你不应该对标准头文件的位置做任何假设.