У меня есть небольшая функция выборки:
#define VALUE 0
int test(unsigned char x) {
if (x>=VALUE)
return 0;
else
return 1;
}
Мой компилятор предупреждает меня, что сравнение (x> = VALUE) истинно во всех случаях, и это правильно, потому что x - это знак без знака, а VALUE определяется со значением 0. Поэтому я изменил свой код на:
if ( ((signed int) x ) >= ((signed int) VALUE ))
Но предупреждение приходит снова. Я протестировал его с тремя версиями GCC (все версии> 4.0, иногда вам нужно включить -Wextra).
В измененном случае у меня есть это явное приведение, и это должно быть сравнение int со знаком. Почему утверждается, что сравнение всегда верно?