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?!
Es liegt daran, dass es sich um einen Fehler handelt. Siehe Fehler 50012
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.
Tags und Links c++ comparison compiler-warnings