Heim >Backend-Entwicklung >C++ >Warum wirft C keine Ausnahmen für die Ganzzahldivision durch Null und wie können wir damit umgehen?
Im angegebenen Codeausschnitt löst die Division durch Null keine Ausnahme aus. Warum ist das so und wie können wir sicherstellen, dass bei solchen Fehlern Ausnahmen ausgelöst werden?
Im Gegensatz zu anderen häufigen Laufzeitfehlern ist die Ganzzahldivision durch Null in Standard-C keine Ausnahme. Auch Gleitkommadivisions- oder Restoperationen lösen grundsätzlich keine Ausnahmen aus. Stattdessen weisen diese Operationen ein undefiniertes Verhalten auf, wenn der zweite Operand Null ist. Dies bedeutet, dass sich das System möglicherweise unvorhersehbar verhält und Ausnahmen auslöst, das Programm abstürzt oder sogar Aktionen außerhalb des Programmbereichs ausführt.
Da Standard C dies nicht unterstützt Division durch Null als Ausnahme verwenden, müssen Entwickler manuell nach solchen Bedingungen suchen und bei Bedarf benutzerdefinierte Ausnahmen auslösen. Beispielsweise könnte man einen „overflow_error“ oder einen „domain_error“ auslösen, um einen Fehler bei der Division durch Null anzuzeigen.
Der folgende modifizierte Codeausschnitt zeigt, wie Ausnahmen bei der Division durch Null mithilfe eines benutzerdefinierten intDivEx abgefangen werden Funktion:
#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
Dieser Code wirft und korrekt aus fängt die Division durch Null-Ausnahme ab und behält den ursprünglichen Wert von i bei.
Das obige ist der detaillierte Inhalt vonWarum wirft C keine Ausnahmen für die Ganzzahldivision durch Null und wie können wir damit umgehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!