Стандарт C требует, чтобы для определения size_t
было достаточно, включая stddef.h
. Под капотом его можно выложить по желанию разработчиков библиотеки.
Вы увидите это много в linux, прежде всего потому, что многие реализации различаются в разных системах (например, x86 против arm), и проще всего поместить определенную версию в отдельный каталог.
Примечание. Однако в конкретном случае /usr/include/linux/stddef.h
это заголовок ядра (предназначен для компиляции ядра). Это не предназначалось для включения в исходный код пользовательского пространства.
Этот edit должен ответить на комментарий shinkou. Я не знаю, как делать многострочные комментарии, так что это самый простой способ:
$ cat incltest.c
#include <stddef.h>
$ cpp -H incltest.c
...
. /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h
...
Вы можете сделать это для любого заголовка.
Как правило, если в вашей системе несколько версий GCC, у вас будет несколько версий cpp (и, следовательно, вы можете видеть, что разные версии используются разными компиляторами):
$ cpp-4.4 -H incltest.c
. /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.4.5/include/stddef.h