Seltsames Warnverhalten mit gcc und signierten / unsignierten Vergleichen

8

Ich habe den folgenden Code:

%Vor%

Beim Kompilieren beschwert sich gcc über

  

warning: "Vergleich zwischen Vorzeichen und Vorzeichen"

OK, ich verstehe

Aber mit dem folgenden Code:

%Vor%

Die Warnung wird nicht mehr angezeigt und ich weiß wirklich nicht warum ... Gibt es einen logischen Grund für ein solches Verhalten oder mache ich etwas falsch?!

    
malamioute 22.09.2011, 08:24
quelle

3 Antworten

4

Es liegt daran, dass es sich um einen Fehler handelt. Siehe Fehler 50012

    
Esben Mose Hansen 22.09.2011 10:10
quelle
0

Ich habe derzeit keinen Zugriff auf einen C ++ - Compiler, um dies zu testen, aber ich denke, dass dies ohne Warnungen funktionieren könnte:

%Vor%     
npclaudiu 22.09.2011 11:09
quelle
-1

Die Antwort liegt in der Art und Weise, wie gcc int und unsigned int behandelt.

unsigned int und int speichern beide einen 2-Byte-Wert. Der Unterschied zwischen ihnen ist, dass unsigned int keine negativen Werte unterstützt. Es kann nur Werte von 0-65.535 speichern. Wenn GCC einen Vergleich zwischen int und unsigned int sieht, konvertiert es den int in eine positive Zahl. Wenn der Wert von int beispielsweise -2 ist, wird er in 2 konvertiert. Wenn dem int jedoch der Operator () vorangestellt ist. (int). GCC interpretiert es als eine positive Zahl (aber konvertiert es immer noch) und gibt keine Warnung.

    
ApprenticeHacker 22.09.2011 09:57
quelle