ОС: Debian 9 (Linux 4.9)
Компилятор: GCC 8.2
В настоящее время я включаю <stddef.h> (где определено size_t) и <stdint.h> (где определено большинство целочисленных типов), но у меня все еще нет ssize_t.
<stddef.h>
size_t
<stdint.h>
ssize_t
Где это определено?
ssize_t определяется в sys/types.h.
sys/types.h
За документацию POSIX :
ИМЯ sys / types.h - типы данных ОПИСАНИЕ #include <sys/types.h> ОПИСАНИЕ Заголовок должен определять по крайней мере следующие типы: ... ssize_t Используется для подсчета байтов или индикации ошибки.
ИМЯ
sys / types.h - типы данных
ОПИСАНИЕ
#include <sys/types.h>
Заголовок должен определять по крайней мере следующие типы:
...
Используется для подсчета байтов или индикации ошибки.
(https://stackoverflow.com/a/29984840/6872717):
Разделение заголовка POSIX и C в мелкозернистых файлах, вероятно, происходит со старых времен, когда компиляция могла занимать много времени, и добавление ненужных файлов заголовков занимало времядлиннее. Если вам нужны только типы ОС, скажем, для прототипов ваших функций, то просто #include <sys/types.h>. Однако если вам нужны определения функций, тогда вы #include <unistd.h> или любой из других системных заголовков., при необходимости.
Разделение заголовка POSIX и C в мелкозернистых файлах, вероятно, происходит со старых времен, когда компиляция могла занимать много времени, и добавление ненужных файлов заголовков занимало времядлиннее.
Если вам нужны только типы ОС, скажем, для прототипов ваших функций, то просто #include <sys/types.h>. Однако если вам нужны определения функций, тогда вы #include <unistd.h> или любой из других системных заголовков., при необходимости.
#include <unistd.h>
Либо #include <unistd.h> для многих функций POSIX, либо просто #include <sys/types.h> для небольшого заголовка, содержащего тип.