Why /usr/include/linux/stddef.h is empty? Why /usr/include/linux/stddef.h is empty? linux linux

Why /usr/include/linux/stddef.h is empty?


The actual location of the headers is implementation defined. What you look at is not the typical <stddef.h> included by gcc. You can find out exactly where it's located on your system with:

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

which is equivalent to including the header <stddef.h> in an empty C file and running gcc -E on it.

The headers in /usr/include/linux are used to compile the C library (usually glibc on Linux). The GNU manual says:

The linux, asm and asm-generic directories are required to compile programs using the GNU C Library; the other directories describe interfaces to the kernel but are not required if not compiling programs using those interfaces. You do not need to copy kernel headers if you did not specify an alternate kernel header source using ‘--with-headers’.

whereas the C library headers are usually placed by somewhere in /usr/lib/. On my ubuntu 15.04, the header /usr/include/linux/stddef.h is empty. But on my CentOS, it has:

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

The bottom line is, this is NOT the stddef.h you are interested in and in general, you should not make any assumptions about the location of the standard header files.