En lisant les commentaires pour cette question je suis tombé sur un lien vers le FAQ comp.lang.c qui montre une "fonction d'addition prudente" qui est censée détecter un dépassement d'entier :
int
chkadd(int a, int b)
{
if (INT_MAX - b < a) {
fputs("int overflow\n", stderr);
return INT_MAX;
}
return a + b;
}
Comment cela ne déborde-t-il pas si b == -1
? Si l'hypothèse est que a
y b
sont toutes deux positives, pourquoi les rendre int
plutôt que unsigned int
en premier lieu ?