Я могу определить целочисленный литерал типа, неподписанного длинный следующим образом:
const unsigned long example = 9UL;
Как я делаю аналогично для неподписанного символа?
const unsigned char example = 9U?;
Это необходимо для предотвращения предупреждения компилятора:
unsigned char example2 = 0;
...
min(9U?, example2);
Я надеюсь избежать подробного обходного решения, я в настоящее время имею и не имею 'неподписанный символ', появляются в минуту вызова строки, не объявляя 9 в переменной на отдельной строке:
min(static_cast<unsigned char>(9), example2);
C не предоставляет стандартного способа обозначения целочисленной константы с шириной меньше, чем у типа int
.
Однако, stdint.h
предоставляет макрос UINT8_C()
, чтобы сделать что-то, что очень близко к тому, что вы ищете, насколько это возможно в C.
Но большинство людей просто используют либо отсутствие суффикса (для получения константы int
), либо суффикс U
(для получения константы unsigned int
). Они отлично работают для значений размера char, и это практически все, что вы получите от макроса stdint.h
в любом случае.
Вы можете привести константу. Например:
min(static_cast<unsigned char>(9), example2);
Вы также можете использовать синтаксис конструктора:
typedef unsigned char uchar;
min(uchar(9), example2);
Типедеф требуется не во всех компиляторах.
Я предполагаю, что '\ 0'
будет символьным литералом со значением 0, но я тоже не вижу в этом смысла.
Для типов беззнаковых символов нет суффикса. Целочисленные константы имеют вид int
или long
( подписанный
или беззнаковый
), а в C99 long long
. Вы можете без проблем использовать простой суффикс «U», если значение находится в допустимом диапазоне беззнаковых символов.
Предполагая, что вы используете std :: min
, вы должны явно указать, какой тип min
должен быть используя как таковые
unsigned char example2 = 0;
min<unsigned char>(9, example2);