Між 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).