Asu*_*uka 10 c linux header-files
这个头文件应该定义NULL或size_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下,ASM和ASM-通用目录需要编译使用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你感兴趣的,一般来说,你不应该对标准头文件的位置做任何假设.