Разница между разными целыми типами
Мне было интересно, в чем разница между uint32_t
и uint32
, и когда я смотрел в файлах заголовков, это имело следующее:
types.h:
/** @brief 32-bit unsigned integer. */
typedef unsigned int uint32;
stdint.h:
typedef unsigned uint32_t;
Это только приводит к большему количеству вопросов:
В чем разница между
unsigned varName;
и
unsigned int varName;
?
Я использую MinGW.
Ответы
Ответ 1
unsigned
и unsigned int
являются синонимами, очень похожими на [unsigned] short [int]
и [unsigned] long [int]
.
uint32_t
- это тип, который (необязательно) определяется стандартом C. uint32
- это просто имя, которое вы создали, хотя оно и определяется как одно и то же.
Ответ 2
Нет никакой разницы.
unsigned int = uint32 = uint32_t = unsigned
в вашем случае и unsigned int = unsigned
всегда
Ответ 3
Абсолютно никакой разницы между unsigned
и unsigned int
.
Является ли этот тип хорошим совпадением для uint32_t
, зависит от реализации; a int
может быть "короче", чем 32 бита.
Ответ 4
unsigned
и unsigned int
являются синонимами по историческим причинам; они оба означают "целое число без знака самого естественного размера для архитектуры/платформы ЦП", которое часто (но далеко не всегда) 32 бита на современных платформах.
<stdint.h>
является стандартным заголовком на C99, который должен давать определения типов для целых чисел определенных размеров, с условным обозначением uint32_t
.
<types.h>
, который вы просматриваете, выглядит нестандартным и, предположительно, принадлежит к какой-либо структуре, используемой вашим проектом. Его uint32
typedef совместим с uint32_t
. Если вы должны использовать тот или иной код, это вопрос для вашего менеджера.