Während die Kommentare für this question lesen, stieß ich auf einen Link zum comp.lang.c FAQ, die eine „vorsichtige Zugabe Funktion“ zeigt, die vorgeblich Integer-Überlauf erfasst:Funktioniert diese Funktion zum Erkennen eines ganzzahligen Additionsüberlaufs tatsächlich?
int
chkadd(int a, int b)
{
if (INT_MAX - b < a) {
fputs("int overflow\n", stderr);
return INT_MAX;
}
return a + b;
}
Wie funktioniert diese nicht überläuft, wenn b == -1
? Wenn die Annahme ist, dass a
und b
beide positiv sind, warum sie int
anstelle von unsigned int
an erster Stelle machen?
weil 'INT_MAX - (-1)' gleich 'INT_MIN' ist? – ddz
Signed "int" ** könnte ** wickeln: aber es ist * undefined Verhalten *. –
Nimmt an, dass 'a' und' b' positiv sind. Nützlich für das Konvertieren von Zeichenfolgen in "int", während auf Überlauf geprüft wird. – user3386109