char c = 128;
само по себе является правильным в C. Стандарт гласит, что char
содержит CHAR_BIT
битов, которые могут быть больше 8. Также, char
может быть подписан или не подписан, определен реализацией иunsigned char
должен содержать как минимум диапазон [0, 255].
Таким образом, реализация, в которой char
больше 8 бит или char
по умолчанию не подписана, эта строкадопустимый и релевантный.
Даже в обычной 8-битной подписанной реализации char
выражение все еще четко определено в том, как оно преобразует 128
в соответствие char
, поэтому нетпроблема.
В реальных случаях компилятор часто выдает предупреждение, например, clang:
warning: implicit conversion from 'int' to 'char' changes value from 128 to -128 [-Wconstant-conversion]
.