С точки зрения языка, об этом нечего предупреждать. i
- unsigned int
до оценки <
. И это совершенно правильно, чтобы увеличить unsigned char
таким образом, чтобы он обертывался до нуля.
Тот факт, что этот код вызывает что-то раздражающее, является неудачным. Но неясно, какое правило должен использовать компилятор, чтобы обнаружить такие вещи.
Благодаря @unwind в комментариях ниже: вы можете получить GCC, чтобы предупредить о том, что это сравнение всегда должны оценить истина, используя -Wtype-limits
флаг.
Update 2: Видимо вышеуказанная опция не работает в этом случае (я не имею «современную» версию GCC в руки прямо сейчас ...)
Показывать флаги сборки, какие предупреждения вы запрашиваете? – unwind
Потому что предупреждение не является поведением по умолчанию, поэтому нужно сделать случай * для * предупреждения? – Jon
fwiw, там _is_ предупреждение, если вы отметите 'test' как' const'. – mitchnull