Між int32
і int32_t
, (а також між int8
і int8_t
) різниця досить проста: стандартний C визначає int8_t
і int32_t
, але не визначає нічого ім'я int8
або int32
- останній (якщо вони взагалі існують), ймовірно , з якого - то іншого заголовка або бібліотек (швидше за все , перед додаванням int8_t
та int32_t
в С99).
Рівнина int
зовсім трохи відрізняється від інших. Де int8_t
і int32_t
кожен має вказаний розмір, int
може бути будь-якого розміру> = 16 біт. У різний час і 16, і 32 біти були досить поширеними (а для 64-розрядної реалізації це, мабуть, має бути 64 біта).
З іншого боку, int
гарантовано буде присутній у кожній реалізації С, де int8_t
і int32_t
ні. Напевно, відкрито питання, чи це має значення для вас. Якщо ви використовуєте C для невеликих вбудованих систем та / або старих компіляторів, це може бути проблемою. Якщо ви використовуєте його головним чином із сучасним компілятором на настільних / серверних машинах, це, мабуть, не буде.
На жаль, пропустили частину о char
. Ви б використовували int8_t
замість char, якщо (і лише якщо) ви хочете, щоб цілий тип гарантовано був розміром рівно 8 біт. Якщо ви хочете зберігати символи, ви, ймовірно, хочете використовувати char
замість цього. Її розмір може змінюватись (за кількістю біт), але гарантовано, що це точно один байт. Однак одна незначна дивна ситуація: немає гарантії щодо того, чи є звичайна char
підписана чи неподписана (і багато компіляторів можуть зробити її або однією, залежно від прапора часу компіляції). Якщо вам потрібно переконатися, що він підписаний або непідписаний, вам це потрібно чітко вказати.
bool_t
- ніколи раніше не чув про це. Стандарт С визначає_Bool
як вбудований тип.bool
визначається лише в тому випадку, якщо ви#include <stdbool.h>
(як макрос, який розширюється на_Bool
).