Я полагаю, что если ваш компилятор поддерживает его, используйте типы заголовков C99 <stdint.h>
, такие как uint8_t
и int8_t
.
Если ваш компилятор не поддерживает его, создайте его. Вот пример для VC ++ , более старые версии которого не имеют stdint.h
. GCC поддерживает stdint.h
, и, действительно, большинство C99
Одна проблема с вашим предложением заключается в том, что знак char
определяется реализацией, поэтому, если вы создадите псевдоним типа. по крайней мере, вы должны быть явно о знаке. В этой идее есть смысл, поскольку в C # , например, char
равен 16 битам. Но он также имеет байтовый тип.
Дополнительные примечания ...
С вашим предложением не возникло проблем, вы на самом деле указали unsigned.
Я бы также предложил использовать простой char
, если данные на самом деле являются символьными данными, то есть представляют собой простой текст, который вы можете отобразить на консоли. Это приведет к меньшему количеству проблем при согласовании типов при использовании стандартных и сторонних библиотек. Если, с другой стороны, данные представляют собой не символьную сущность, такую как растровое изображение, или это числовые данные с «маленьким целым числом», для которых вы можете выполнять арифметические манипуляции, или данные, над которыми вы будете выполнять логические операции, то один из stdint.h
типы (или даже тип, определенный из одного из них) должны быть использованы.
Недавно меня поймали на TI C54xx компиляторе, где char
на самом деле 16 бит, поэтому, по возможности, используйте stdint.h , где это возможно, даже если вы его используете затем определить тип byte
предпочтительнее, если предположить, что unsigned char
является подходящим псевдонимом.