C: Что-то не так с объявлением байтовых массивов как uint8_t?

Я работаю над небольшим сетевым приложением, которое использует байтовые массивы. Традиционно они будут объявлены с чем-то вроде char buf[] = ...,

Похоже, что это так (до сих пор?) Это делается в большинстве уроков, но есть проблема, заключающаяся в том, что он может скрыть то, что на самом деле происходит, например, когда вы пытаетесь напечатать такой массив и забыть, что не каждый символ является видимым символом.,

Некоторые люди предложили вам прекратить использование chars в целом и вместо этого использовать современный uint8_t, Я нахожу это очень привлекательным, в основном по принципу, что явное лучше, чем неявное.

Итак, что-то не так с объявлением таких массивов как uint8_t buf[] = ...?

1 ответ

Решение

Начиная с введения stdint.h заголовок в C99, нет веских причин для продолжения использования char тип для представления небольших чисел.

В дополнение к лучшему документированию ваших намерений, uint8_t дает вам еще одно важное преимущество: он гарантирует, что байт будет обрабатываться как неподписанный. Когда вы используете char Вы не можете предполагать, подписано ли оно или нет, потому что это поведение определяется реализацией.

Насколько непреднамеренная печать буфера идет, используя uint8_t не собирается гарантировать какую-либо защиту, потому что на многих платформах это просто typedef за unsigned char,

Другие вопросы по тегам