Heim > Backend-Entwicklung > C++ > Warum wirft C keine Ausnahmen für die Ganzzahldivision durch Null und wie können wir damit umgehen?

Warum wirft C keine Ausnahmen für die Ganzzahldivision durch Null und wie können wir damit umgehen?

DDD
Freigeben: 2024-12-14 17:20:12
Original
322 Leute haben es durchsucht

Why Doesn't C   Throw Exceptions for Integer Division by Zero, and How Can We Handle It?

Laufzeit-Division durch Null-Ausnahme abfangen

Problemstellung

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?

Erklärung

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.

Benutzerdefinierte Ausnahmen auslösen

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.

Codebeispiel

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 &amp;e) {
        std::cout << e.what() << " -> " << i << std::endl;
    }
    std::cout << i << std::endl;

    try {
        i = intDivEx(10, 2);
    } catch (std::overflow_error &amp;e) {
        std::cout << e.what() << " -> " << i << std::endl;
    }
    std::cout << i << std::endl;

    return 0;
}
Nach dem Login kopieren

Ausgabe:

Divide by zero exception -> 42
5
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage