[23:50:27] <RipPlanCul>
Mais avec un int x initialisé à -2147483648, (x-1) est évalué à 2147483647 
Mais en aucun cas ça peut être évalué à 0 
Petit conseil, c'est pas parce que tu observes un comportement que ce comportement est une règle. Les compilateurs fonctionnent tous de manière différente et il y a plusieurs implémentations valides possibles du C, donc deux compilateurs différents respectant à 100% le standard peuvent avoir deux comportements différents dans certains cas particulier.
Donc si possible ce genre de choses doivent être vérifiées en lisant la documentation.
En pratique, je ne connais pas un seul compilateur ou architecture qui n'overflow pas les entiers en fonction de leur complement a deux.
Mais il vaut quand même mieux éviter d'avoir du code basé là dessus, rien que le fait que ça empêche d'utiliser des sanitizers pour détecter des vrais erreurs d'overflow est une raison suffisante.