g ++ strikter Überlauf, Optimierung und Warnungen
Beim Kompilieren des Folgenden mit dem strengen Überlauf-Flag wird mir beim zweiten Test mitgeteilt, dass r möglicherweise nicht das ist, was ich denke, dass es sein könnte:
int32_t r(my_rand());
if(r < 0) {
r = -r;
if(r < 0) { // <-- error on this line
r = 0;
}
}
Der Fehler ist:
/build/buildd/libqtcassandra-0.5.5/tests/cassandra_value.cpp:
In function 'int main(int, char**)':
/build/buildd/libqtcassandra-0.5.5/tests/cassandra_value.cpp:2341:13:
error: assuming signed overflow does not occur when simplifying
conditional to constant [-Werror=strict-overflow]
if(r < 0) {
^
Was ich nicht verstehe ist: Warum würde der Fehler vorher nicht auf der Leitung erzeugt werden? Weil wirklich der Überlauf passiert, wenn ich das tue, oder?
r = -r;