Подтвердить что ты не робот

Что такое int8_t, если машина имеет> 8 бит на байт?

Я читал часто задаваемые вопросы по С++, и он говорит

Язык С++ гарантирует, что байт должен иметь не менее 8 бит

Итак, что это значит для типов <cstdint>?

Боковой вопрос - если мне нужен массив байтов, я должен использовать int8_t или char и почему?

4b9b3361

Ответ 1

С++ (и C также) определяет intX_t (т.е. целые типы точной ширины) typedefs как необязательные. Таким образом, его просто не будет, если нет адресной единицы, которая имеет ровно 8 бит.

Если вам нужен массив байтов, вы должны использовать char, так как sizeof charsigned char и unsigned char) корректно определены, чтобы всегда быть 1 байт.

Ответ 2

Чтобы добавить к тому, что уже сказал Cat Plus Plus (что тип необязательно), вы можете проверить, присутствует ли он, используя что-то вроде:

#ifdef INT8_MAX
//  type int8_t exists.
#endif

или более вероятно:

#ifndef INT8_MAX
#error Machines with bytes that don't have 8 bits aren't supported
#endif