J'ai une fonction petit échantillon:Comment taper jeter un littéral dans C
#define VALUE 0
int test(unsigned char x) {
if (x>=VALUE)
return 0;
else
return 1;
}
Mon compilateur me prévient que la comparaison (x> = VALUE) est vrai dans tous les cas, ce qui est juste, parce que x est un caractère non signé et la valeur est définie avec la valeur 0. donc, j'ai changé mon code pour:
if (((signed int) x) >= ((signed int) VALUE))
Mais l'avertissement vient à nouveau. Je l'ai testé avec trois versions de GCC (toutes les versions> 4.0, parfois vous devez activer -Wextra).
Dans le cas modifié, j'ai cette conversion explicite et il doit s'agir d'une comparaison int signée. Pourquoi prétend-elle que la comparaison est toujours vraie?
Alors, qu'essayez-vous d'accomplir? Dans quelles conditions voulez-vous que cela renvoie 1 par opposition à 0? –
Mon intention était d'échapper à cet avertissement. –
Ne partez pas de l'avertissement, essayez de vous débarrasser de votre besoin de savoir si un non signé est> = 0. Il est toujours - c'est ce que le compilateur vous dit. – xtofl