C-Fehlerbehandlung mit goto: Ein gemeinsamer Aufräum-Pfad pro Funktion

Fehlerbehandlung in C mit goto? Genau das empfiehlt ein Blogpost auf thestateofinahaze.net vom 25. Oktober 2026. Der Verfasser, der nach eigener Aussage zum ersten Mal seit 2018 wieder C schreibt, bündelt alle Fehler-Zweige in einem gemeinsamen Aufräum-Pfad am Funktionsende, den sie per goto anspringen, was heißt: duplizierter Aufräum-Code in jedem Zweig entfällt. In Go seien rund 99 Prozent aller Fehlerfälle mit einer einzigen defer-Zeile abgewickelt, rechnet der Beitrag vor, weshalb das von Hand in C erst mal wie eine Zumutung wirkt.

Spaghetti-Code-Alarm inklusive? Den Löse ich bei goto reflexartig aus, auch ohne einen einzigen Code-Block gesehen zu haben. Der Text holt einen aber schnell ein, weil das Problem so klein und alt ist: Wer Ressourcen in C freigibt, tippt dieselben Zeilen fast immer wieder.

Warum ausgerechnet goto bei der Fehlerbehandlung in C?

Weil C weder Go-ähnliche defer noch Zig-ähnliche errdefer kennt. Stattdessen steht am Funktionsende ein gemeinsamer Aufräum-Pfad, den jeder Fehler-Zweig per goto anspringt. Der Beitrag nennt als Gewinn: weniger Wiederholung im Code und kleinere Unterschiede zwischen den Zweigen. Wer schon dreimal dieselben free()-Aufrufe untereinander tippte, ahnt sofort, worum es geht.

Was ist der Unterschied zwischen defer und errdefer?

Beide sind Sprach-Komfort fürs Aufräumen: defer in Go, errdefer in Zig. In Go wird ein Fehler verpackt und nach oben gereicht, während defer das Freigeben zuverlässig übernimmt. Zig verlangt wegen der manuellen Speicher-Verwaltung nach errdefer, und genau das fällt dem Autor spürbar schwerer.

Aspekt Go Zig
Schlüsselwort fürs Aufräumen defer errdefer
Speicher-Verwaltung keine manuelle Allokation nötig manuelle Verwaltung nötig
Gefühl beim Schreiben in rund 99 Prozent der Fälle trivial schwieriger, Routine fehlt noch

Cleverer Einfall, aber noch kein Beleg: Eine Zeilen-Ersparnis, ein Beispiel mit und ohne goto im Direktvergleich oder Zahlen aus einem größeren Projekt liefert der Beitrag nicht. Für C-Nachwuchs mit Go-Prägung klingt das Muster trotzdem vernünftig, gerade weil es sich so klein anfühlt.

Kurz beantwortet: Was hat John Carmack mit C zu tun? Dessen Mails über Inline-Code haben dem Autor laut Beitrag den zündenden Moment für die sauberere Fehlerbehandlung beschert. Und ist goto damit offiziell empfohlen? Nein, der Text bleibt die Erfahrung eines einzelnen Entwicklers, keine Regel für die nächste Code-Basis.

Ob der goto-Pfad in einem echten Team trägt, muss jede Code-Basis selbst zeigen. Mich interessiert der Randfall: Was passiert, wenn die nächste Person beim Debuggen aus Bequemlichkeit einen Fehler einfach zurückgibt, ohne den Sprung zum Aufräum-Pfad zu setzen?

Schreibe einen Kommentar