C: Что-то не так с объявлением байтовых массивов как uint8_t?
Я работаю над небольшим сетевым приложением, которое использует байтовые массивы. Традиционно они будут объявлены с чем-то вроде char buf[] = ...
,
Похоже, что это так (до сих пор?) Это делается в большинстве уроков, но есть проблема, заключающаяся в том, что он может скрыть то, что на самом деле происходит, например, когда вы пытаетесь напечатать такой массив и забыть, что не каждый символ является видимым символом.,
Некоторые люди предложили вам прекратить использование chars
в целом и вместо этого использовать современный uint8_t
, Я нахожу это очень привлекательным, в основном по принципу, что явное лучше, чем неявное.
Итак, что-то не так с объявлением таких массивов как uint8_t buf[] = ...
?
1 ответ
Начиная с введения stdint.h
заголовок в C99, нет веских причин для продолжения использования char
тип для представления небольших чисел.
В дополнение к лучшему документированию ваших намерений, uint8_t
дает вам еще одно важное преимущество: он гарантирует, что байт будет обрабатываться как неподписанный. Когда вы используете char
Вы не можете предполагать, подписано ли оно или нет, потому что это поведение определяется реализацией.
Насколько непреднамеренная печать буфера идет, используя uint8_t
не собирается гарантировать какую-либо защиту, потому что на многих платформах это просто typedef
за unsigned char
,