но VC ++ 9 выдает "негатив
подпись "ошибка при компиляции
- sizeof (UCHAR_MAX) равен 4, а не 1.
В этом посте я не отвечаю с точки зрения решения, но пытаюсь найти причину.
Рассмотрим выражение
#define MAX 255;
Насколько я понимаю, sizeof(MAX) a.k.a (sizeof(255))
всегда будет иметь размер целочисленного литерала на данной платформе в соответствии с данными правилами в стандарте 2.3.1 / 2. То, что это UCHAR_MAX и содержит максимальное значение char
, не означает, что размер такого имени будет равен char
Тип целочисленного литерала зависит
по форме, значению и суффиксу. Если оно
является десятичным и не имеет суффикса, имеет
первый из этих типов, в котором его
значение может быть представлено: int, long
INT; если значение не может быть
представлен как длинный int,
поведение не определено. Если это восьмеричное
или шестнадцатеричный и не имеет суффикса, это
имеет первый из этих типов, в котором
его значение может быть представлено: int,
unsigned int, long int, unsigned long
внутр. Если это суффикс U или U, его
тип является первым из этих типов в
какое его значение можно представить:
unsigned int, unsigned long int. Если оно
с суффиксом l или L, его тип
первый из этих типов, в котором его
значение может быть представлено: long int,
без знака длинный инт. Если это суффикс
по ul, lu, uL, Lu, Ul, lU, UL или LU,
его тип - беззнаковое длинное целое.
Таким образом, ожидание того, что оно будет 1
, необходимо перепроверить, что, по-видимому, является коренной причиной здесь. sizeof(MAX)
будет одним только на тех архитектурах, где int
такой же ширины, как char
. Я не уверен, сколько таких систем действительно существует.