Durante la lettura dei commenti per this question, mi sono imbattuto in un link al comp.lang.c FAQ che mostra una "funzione aggiunta attenta" che rileva presumibilmente integer overflow:Questa funzione per rilevare l'overflow di aggiunta di interi funziona effettivamente?
int
chkadd(int a, int b)
{
if (INT_MAX - b < a) {
fputs("int overflow\n", stderr);
return INT_MAX;
}
return a + b;
}
Come fa questo non overflow se b == -1
? Se l'assunto è che a
e sono entrambi positivi, perché renderli int
anziché unsigned int
in primo luogo?
perché 'INT_MAX - (-1)' è uguale a 'INT_MIN'? – ddz
Firmato 'int' ** potrebbe ** wrap: ma è * comportamento non definito *. –
Presuppone che 'a' e' b' sono positivi. Utile per convertire stringhe in 'int' mentre si controlla l'overflow. – user3386109