Ho il seguente codice:comportamento avvertimento Strano con gcc e firmate/i confronti non firmati
unsigned int a;
if (a > numeric_limits<int>::max())
do_stuff();
Quando si compila, gcc si lamenta
avvertimento: "confronto tra firmato e unsigned"
OK, ho capito
Ma, con il seguente codice:
unsigned int a;
if (a > (numeric_limits<int>::max()))
do_stuff();
L'avvertimento non viene più visualizzato e io davvero non so perché ... v'è alcuna ragione logica per un tale comportamento o sto facendo qualcosa di sbagliato ?!
Cercato di [simulare questo comportamento] (http: // www. ideone.com/5NZL9). Ma mostra un avvertimento. – iammilind
Qual è il codice circostante? – quasiverse
La parte do_stuff() consiste solo nel generare un'eccezione. Non esiste un codice circostante in quanto questa è l'unica linea all'interno di una funzione. Tuttavia, la funzione è utilizzata in un grande progetto. Ho provato il codice fornito da iammilind ma l'avviso non compare. Ecco le opzioni di gcc che uso per compilare il programma '-Wall -ansi -pedantic -Wno-long-long' – malamioute