Что такое int8_t, если машина имеет> 8 бит на байт? - PullRequest
15 голосов
/ 14 декабря 2011

Я читал C ++ FAQ и там написано

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

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

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

Ответы [ 2 ]

14 голосов
/ 14 декабря 2011

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

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

2 голосов
/ 14 декабря 2011

Чтобы добавить к тому, что 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...