Между int32
и int32_t
(а также между int8
и int8_t
) разница довольно проста: стандарт C определяет int8_t
и int32_t
, но не определяет ничего с именем int8
или int32
- последнее (если они вообще существуют), вероятно, из какого-то другого заголовка или библиотеки (скорее всего предшествует добавлению int8_t
иint32_t
в C99).
Обычный int
совсем немного отличается от других. Где int8_t
и int32_t
каждый имеет указанный размер, int
может быть любым размером> = 16 бит. В разное время достаточно распространены и 16-битные, и 32-битные (а для 64-битной реализации, вероятно, должно быть 64 бит).
С другой стороны, int
гарантированно присутствует в каждой реализации C, где int8_t
и int32_t
нет. Вероятно, остается открытым вопрос, имеет ли это значение для вас. Если вы используете C в небольших встроенных системах и / или старых компиляторах, это может быть проблемой. Если вы используете его в основном с современным компилятором на настольных / серверных машинах, вероятно, этого не будет.
Упс - пропустил часть про char
. Вы бы использовали int8_t
вместо char, если (и только если) вы хотите, чтобы целочисленный тип гарантированно имел размер ровно 8 бит. Если вы хотите хранить символы, вы, вероятно, захотите использовать char
вместо этого. Его размер может быть разным (по количеству битов), но гарантированно равен одному байту. Одна небольшая странность: нет никакой гарантии того char
, подписан или нет обычный простой (и многие компиляторы могут сделать это одним из них, в зависимости от флага времени компиляции). Если вам нужно убедиться, что он подписан или не подписан, вам нужно указать это явно.
bool_t
- никогда раньше не слышал об этом. Стандарт C определяет_Bool
как встроенный тип.bool
определяется, только если вы#include <stdbool.h>
(как макрос, который расширяется до_Bool
).Типы данных _t - это типы typedef в заголовке stdint.h, а int - это встроенный основной тип данных. Это делает _t доступным, только если существует stdint.h. int с другой стороны гарантированно существует.
источник
Всегда помните, что «размер» является переменным, если он не указан явно, поэтому, если вы объявляете
В некоторых системах это может привести к 16-битному целому числу компилятором, а в некоторых других - к 32-битному целому числу (или 64-битному целому числу в более новых системах).
Во встроенных средах это может привести к странным результатам (особенно при обработке ввода-вывода с отображением памяти или может рассматриваться как простая ситуация с массивом), поэтому настоятельно рекомендуется указывать переменные фиксированного размера. В устаревших системах вы можете встретить
Начиная с C99, дизайнеры добавили заголовочный файл stdint.h, который по существу использует аналогичные определения типов.
В системе на базе Windows вы можете видеть записи в заголовочном файле stdin.h как
Есть нечто большее, например, целочисленные типы с минимальной шириной или целые числа с точной шириной, я думаю, неплохо изучить stdint.h для лучшего понимания.
источник
typedef short INT16;
нетtypedefs short INT16
.