Mam następujący kod:Dziwne zachowanie ostrzeżenie z gcc i podpisane/niepodpisane porównania
unsigned int a;
if (a > numeric_limits<int>::max())
do_stuff();
Podczas kompilacji gcc narzeka na
ostrzeżenie: "porównania między podpisane i niepodpisane"
OK, rozumiem
Ale z następującym kodem:
unsigned int a;
if (a > (numeric_limits<int>::max()))
do_stuff();
Ostrzeżenie nie jest już wyświetlany, a ja naprawdę nie wiem, dlaczego ... Czy istnieje jakiś logiczny powód takiego zachowania albo robię coś źle ?!
Próbował [symulować to zachowanie] (http: // www. ideone.com/5NZL9). Ale pokazuje ostrzeżenie. – iammilind
Jaki jest otaczający kod? – quasiverse
Część do_stuff() polega tylko na rzucaniu wyjątku. Nie ma kodu otaczającego, ponieważ jest to jedyne linie w funkcji. Jednak funkcja jest używana w dużym projekcie. Próbowałem kod dostarczony przez iammilind, ale ostrzeżenie nie pojawia się. Oto opcje gcc, których używam do kompilowania programu '-Wall -ansi -pedantic -Wno-long-long'' – malamioute