Почему size_t в stddef, а не в stdint?
Мне просто интересно, почему такие вещи, как uintptr_t
находятся в stdint.h
, но другие типы как size_t
находятся в stddef.h
? Есть ли логика за этими заголовками?
1 ответ
Рассуждения во многом являются условностью и историей.
<stddef.h>
а также size_t
существует примерно с 1989 г. в стандарте ANSI языка C (в книге "Язык программирования C" 1978 г. заголовок или size_t
, а также sizeof
выражения имели тип int
- это имело смысл в экосистемах, где "естественный размер слова" процессора был также размером адресов и индексов в системе).
<inttypes.h>
а также <stdint.h>
были добавлены в стандарт С для пересмотра 1999 года, и их наличие объясняется в Обосновании C99.
<inttypes.h>
был получен из одноименного заголовка, найденного в нескольких существующих 64-битных системах. Комитет обсудил другие методы определения целочисленных размеров и других характеристик, но в итоге решил стандартизировать существующую практику, а не вводить новшества в этой области....<stdint.h>
это подмножество<inttypes.h>
больше подходит для использования в автономных средах, которые могут не поддерживать форматированные функции ввода-вывода. В размещенных средах, если форматированная цель преобразования не нужна, используйте этот заголовок вместо<inttypes.h>
избегает определения такого большего количества макросов.