Между 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).