2015-06-02 5 views
5

Ich schließe eine Header-Datei von Drittanbietern ein. Es hat Funktionen, die Ausnahmen auslösen können. Wie ermittle ich in meinem Quellcode, welche Ausnahmen möglicherweise aus dieser Datei ausgelöst werden können? Es war eine Interviewfrage. Meine Antwort bestand darin, die Funktionsdeklarationen durchzugehen und nach der Ausnahmebeschreibung zu suchen. Das könnte uns einen Hinweis geben. Gibt es eine andere Möglichkeit, mit der wir Ausnahmen vorhersagen können, die ausgelöst werden könnten?Wie errate ich alle möglichen Ausnahmen, die in C++ geworfen werden könnten?

+0

Es gibt keinen anderen Weg. Wenn Ihr Code Ausnahmen nicht passieren lassen soll (z. B. eine Modulgrenze), verwenden Sie eine Catch-All-Klausel. – StoryTeller

+0

Gibt es ein Tool, das wir ausführen könnten, um das herauszufinden? –

+0

Der einzige Weg, dies zu erkennen, ist der Quellcode der Bibliothek. – QuestionC

Antwort

3

Dies hat mehrere Aspekte:

  • Wenn Ausnahmen für eine Funktion deklariert sind, werden nur diejenigen (und Klassen abgeleitet, natürlich) kann möglicherweise geworfen werden, alle anderen Programmabbruch führen.
  • Auch wenn Ausnahmen für eine Funktion deklariert sind, erzwingt nicht jeder Compiler diese Regel.
  • Wenn keine Ausnahmen (nicht eine leere Reihe von Ausnahmen!) Für eine Funktion deklariert sind, kann alles geworfen werden.
  • Vernünftiger Code wird niemals etwas werfen, das nicht von std::exception abgeleitet ist, also anzunehmen, dass ein abgeleiteter Typ geworfen wird, ist ein guter Ansatz.
  • Guter Code dokumentiert die Fehlerbehandlung, obwohl Sie implizit std::bad_alloc von jeder Funktion erwarten sollten, die Speicher zuweist.
+0

Leider gibt es dort viel nicht-vernünftigen Code. Daher kann Catch-All nützlich sein, auch wenn es normalerweise auch ein Zeichen für Facepalm ist. –

Verwandte Themen