Относительно того, 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
.