Maison >développement back-end >C++ >Pourquoi C ne lève-t-il pas d'exceptions pour la division entière par zéro et comment pouvons-nous la gérer ?
Dans l'extrait de code donné, la division par zéro ne déclenche pas d'exception. Pourquoi est-ce le cas et comment pouvons-nous garantir que des exceptions sont levées pour de telles erreurs ?
Contrairement à d'autres erreurs d'exécution courantes, la division entière par zéro n'est pas une exception dans la norme C . Les opérations de division ou de reste en virgule flottante ne génèrent pas non plus d'exceptions en soi. Au lieu de cela, ces opérations ont un comportement indéfini lorsque le deuxième opérande est zéro. Cela signifie que le système pourrait potentiellement se comporter de manière imprévisible, notamment en lançant des exceptions, en faisant planter le programme ou même en effectuant des actions en dehors de la portée du programme.
Étant donné que le standard C ne gère pas division par zéro à titre d'exception, les développeurs doivent vérifier manuellement ces conditions et lancer des exceptions personnalisées si nécessaire. Par exemple, on pourrait lancer une erreur overflow_error ou une domain_error pour indiquer une erreur de division par zéro.
L'extrait de code modifié suivant montre comment intercepter la division par zéro exceptions à l'aide d'un intDivEx personnalisé fonction :
#include <iostream> #include <stdexcept> // Integer division, catching divide by zero. inline int intDivEx(int numerator, int denominator) { if (denominator == 0) throw std::overflow_error("Divide by zero exception"); return numerator / denominator; } int main() { int i = 42; try { i = intDivEx(10, 0); } catch (std::overflow_error &e) { std::cout << e.what() << " -> " << i << std::endl; } std::cout << i << std::endl; try { i = intDivEx(10, 2); } catch (std::overflow_error &e) { std::cout << e.what() << " -> " << i << std::endl; } std::cout << i << std::endl; return 0; }
Divide by zero exception -> 42 5
Ce code correctement lance et attrape la division par zéro exception, en préservant la valeur originale de i.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!