Was sind einige gute Methoden zur Behandlung von Fehlern (Bereinigen und Abbrechen) in einer Funktion, die mehrere Ressourcen in C initialisiert?

Zunächst, wenn jemand die Frage umformulieren kann, um sie klarer zu machen, bitte.

In der C-Programmierung müssen häufig mehrere Ressourcen in einer bestimmten Reihenfolge initialisiert / zugewiesen werden. Jede Ressource ist Voraussetzung für die Initialisierung nachfolgender Ressourcen. Wenn einer der Schritte fehlschlägt, müssen die verbleibenden Ressourcen der vorherigen Schritte freigegeben werden. Der ideale Pseudocode (unter Verwendung einer magisch generischen Funktion pure-unobtainium clean_up_and_abort ()) würde ungefähr so aussehen:

err=alloc_a()
if(err)
    clean_up_and_abort()

err=alloc_b()
if(err)
    clean_up_and_abort()

err=alloc_c()
if(err)
    clean_up_and_abort()

// ...

profit()

Ich habe verschiedene Möglichkeiten gesehen, um damit umzugehen, alle scheinen erhebliche Nachteile zu haben, zumindest in Bezug auf das, was die Leute als "gute Praxis" bezeichnen.

Was sind die am besten lesbaren und am wenigsten fehleranfälligen Methoden zur Strukturierung des Codes, wenn Sie mit dieser Situation umgehen? Effizienz wird bevorzugt, aber ein angemessenes Maß an Effizienz kann aus Gründen der Lesbarkeit geopfert werden. Bitte listen Sie Vor- und Nachteile auf. Antworten zu verschiedenen Methoden sind willkommen.

Das Ziel ist es, hoffentlich eine Reihe bevorzugter Methoden zur Lösung dieses Problems zu finden.

Ich werde mit einigen der Methoden beginnen, die ich bereits gesehen habe,bitte kommentiere sie und füge andere hinzu.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage