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

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

Solutions Collecting From Web of "为什么/usr/include/linux/stddef.h是空的?"

头的实际位置是实现定义的。 你看什么不是gcc包含的典型<stddef.h> 。 您可以通过以下方式准确找出系统所在位置:

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

这相当于将头文件<stddef.h>在一个空的C文件中,并在其上运行gcc -E

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

linuxasmasm-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 ,一般来说,你不应该对标准头文件的位置做任何假设。