Czytając komentarze do this question, natknąłem się na link do comp.lang.c FAQ która pokazuje „starannego funkcję dodawania”, która rzekomo wykrywa całkowitą przepełnienie:Czy ta funkcja do wykrywania przekroczenia liczby całkowitej rzeczywiście działa?
int
chkadd(int a, int b)
{
if (INT_MAX - b < a) {
fputs("int overflow\n", stderr);
return INT_MAX;
}
return a + b;
}
Jak to nie przepełnienia jeśli b == -1
? Jeśli założenie jest takie, że a
i b
są zarówno dodatnie, dlaczego zamiast tego są one int
, a nie ?
ponieważ 'INT_MAX - (-1)' jest równe 'INT_MIN'? – ddz
Podpisano 'int' ** może ** wrap: ale jest to zachowanie * niezdefiniowane *. –
Zakłada, że 'a' i' b' są dodatnie. Przydatny do konwersji łańcuchów na 'int' podczas sprawdzania przepełnienia. – user3386109