Относительно того, sizeявляется ли _t подписанным или неподписанным и GCC (из старого руководства GCC - я не уверен, что это все еще там):
Существует потенциальная проблема с
size_tтипом и версиями GCC до выпуска 2.4. ANSI C требует, чтобыsize_tвсегда был тип без знака. Для совместимости с существующими файлами заголовков систем, GCC определяетstddef.hвsys/types.hбыть любой тип системыsize_tопределяет , что это будет. Большинство систем Unix, которые определяютsys/types.hвsize_t, определяют его как тип со знаком. Некоторый код в библиотеке зависит отsize_tтого, является ли он неподписанным типом, и не будет работать правильно, если он подписан.Код библиотеки GNU C, который ожидает
size_tбыть неподписанным, является правильным. Определение типаsize_tсо знаком неверно. Мы планируем, что в версии 2.4 GCC всегда будет определятьсяsys/types.hкак тип без знака, а сценарий 'fixinclude' будет обрабатывать систему,size_tчтобы не конфликтовать с этим.Тем временем, мы обходим эту проблему, явно говоря GCC использовать тип без знака для
size_tкомпиляции библиотеки GNU C. 'configure' автоматически определит, какой тип GCC использует дляsize_tупорядочения, чтобы переопределить его при необходимости.
Если вы хотите , подписанную версию ptrdiff_tиспользования ssize_tили на некоторых системах есть ЬурейиЙ для size_t.