Heim >Backend-Entwicklung >C++ >Warum löst C keine Ausnahme für die Ganzzahldivision durch Null aus?

Warum löst C keine Ausnahme für die Ganzzahldivision durch Null aus?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-25 08:03:14179Durchsuche

Why Doesn't C   Throw an Exception for Integer Divide-by-Zero?

Abfangen von Divide-by-Zero-Ausnahmen

Trotz Versuchen, eine Ausnahme mithilfe eines Try/Catch-Blocks abzufangen, umgeht der folgende Code aus unerklärlichen Gründen die Ausnahme bei Division durch Null:

int i = 0;

cin >> i; // input validation not present

try {
    i = 5/i;
}
catch (std::logic_error e) {

    cerr << e.what();
}

Ausnahmebehandlung in C

Entgegen den Erwartungen ist die Ganzzahldivision durch Null keine eingebaute Ausnahme in Standard-C. Dies gilt auch für Gleitkommadivision/-rest durch Null, obwohl in diesem Fall spezifische rationale Werte wie NaN/Inf resultieren können.

Die Liste der im ISO C 20-Standard definierten Ausnahmen umfasst:

logic_error
domain_error
invalid_argument
length_error
out_of_range
runtime_error
range_error
overflow_error
underflow_error

Während Argumente dafür vorgebracht werden könnten, overflow_error oder domain_error zu verwenden, um eine Division durch Null anzugeben, gibt der Standard ausdrücklich an, dass das Verhalten in einem solchen Fall undefiniert ist Fälle.

Benutzerdefinierte Ausnahmebehandlung

Wenn eine Division durch Null-Ausnahme gewünscht ist, kann diese manuell implementiert werden. Im folgenden Beispiel wird die intDivEx-Funktion verwendet, um Ganzzahlen mit Ausnahmebehandlung zu dividieren:

inline int intDivEx (int numerator, int denominator) {
    if (denominator == 0)
        throw std::overflow_error("Divide by zero exception");
    return numerator / denominator;
}

Die Ausgabe dieser Funktion zeigt, dass die Ausnahme ausgelöst und abgefangen wird, wobei die ursprüngliche Variable im Falle einer Division durch unberührt bleibt -Null:

i = intDivEx(10, 0); // throws exception

i = intDivEx(10, 2); // returns 5

Das obige ist der detaillierte Inhalt vonWarum löst C keine Ausnahme für die Ganzzahldivision durch Null aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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