Édition pédagogique en français
Exception arithmétique en C
Diagnostiquez les divisions entières invalides derrière le message « floating point exception ».

Malgré son nom historique, ce message peut provenir d’une division entière par zéro, sans aucun nombre à virgule flottante. Le signal et le code de sortie affichés dépendent du système et du service d’exécution.
Validez la lecture des entrées et vérifiez le diviseur avant / ou %. Une division signée dont le quotient n’est pas représentable, comme la valeur minimale divisée par -1 sur les types usuels, pose aussi problème.
Isolez les opérandes de l’opération fautive et contrôlez leurs plages. Distinguez les règles des entiers de celles des nombres flottants ; remplacer les types sans comprendre le calcul peut introduire une autre erreur.
Code source
#include <stdio.h>
#include <limits.h>
int safe_divide(int a, int b, int *out_result) {
if (b == 0) {
return -1; // Error: division by zero
}
// Protect against INT_MIN / -1 signed overflow
if (a == INT_MIN && b == -1) {
return -2; // Error: signed integer overflow
}
*out_result = a / b;
return 0; // Success
}
int main(void) {
printf("=== Safe Integer Division Demo ===\n");
int test_cases[][2] = {
{100, 5},
{100, 0},
{INT_MIN, -1},
{42, 7}
};
int num_tests = sizeof(test_cases) / sizeof(test_cases[0]);
for (int i = 0; i < num_tests; i++) {
int a = test_cases[i][0];
int b = test_cases[i][1];
int result = 0;
int status = safe_divide(a, b, &result);
if (status == 0) {
printf("[OK] %d / %d = %d\n", a, b, result);
} else if (status == -1) {
printf("[GUARDED] Division by zero rejected for %d / %d\n", a, b);
} else if (status == -2) {
printf("[GUARDED] INT_MIN / -1 overflow rejected for %d / %d\n", a, b);
}
}
printf("All divisions validated safely without SIGFPE crashes.\n");
return 0;
}Ouvrir dans le compilateurRésultat attendu
=== Safe Integer Division Demo === [OK] 100 / 5 = 20 [GUARDED] Division by zero rejected for 100 / 0 [GUARDED] INT_MIN / -1 overflow rejected for -2147483648 / -1 [OK] 42 / 7 = 6 All divisions validated safely without SIGFPE crashes.
Questions fréquentes
Pourquoi le code et certains résultats restent-ils en anglais ?
Les mots-clés C, les identifiants, les commentaires du programme et les sorties attendues restent ceux de la version originale pour conserver un code exécutable et des tests cohérents. Les explications et les consignes sont traduites.