Von Anfang an war es in der Programmiersprache C erlaubt, die geschweiften Klammern für einen einzelnen Operator innerhalb der if-Anweisung wegzulassen. Dies machte den Code kompakter, führte jedoch zu vielen unauffälligen Fehlern, insbesondere bei Erweiterungen und Modifikationen. Der historische Grund dafür ist die Platzersparnis und die Einfachheit der Syntax für minimalistische Fälle.
Das Problem tritt auf, wenn der Entwickler vergisst, dass ohne Klammern if nur den ersten Ausdruck nach ihm steuert: Alle folgenden werden bedingungslos ausgeführt, auch wenn dies visuell nicht offensichtlich erscheint. Dieser Stil führt zu versteckten Bugs, die schwer zu erkennen sind beim Lesen des Codes und aufgrund von vergessenen Einrückungen oder dem Hinzufügen neuer Zeilen zu Fehlern führen.
Die Lösung ist: Immer geschweifte Klammern verwenden, selbst wenn es nur einen Operator gibt. Dies erhöht die Lesbarkeit und Sicherheit des Codes.
Beispielcode:
// Schlecht: if (x > 0) do_something(); do_other(); // Wird immer ausgeführt // Besser: if (x > 0) { do_something(); do_other(); }
Wichtige Merkmale:
Beeinflusst die Einrückung (Tabulator/Leerzeichen) den Gültigkeitsbereich von if?
Nein, in der Programmiersprache C wird der Gültigkeitsbereich nur durch Klammern definiert, nicht durch Einrückungen.
Welches Verhalten hat dieser Code?
if (a > 0) fun1(); fun2();
fun1() wird nur aufgerufen, wenn a > 0. fun2() wird immer unabhängig von der Bedingung aufgerufen.
Was sind die Konsequenzen, wenn beim Hinzufügen einer neuen Zeile die Klammern vergessen werden?
Dieser Code kann das Verhalten ändern und zu Fehlern führen, die visuell schwer zu erkennen sind, da Einrückungen keine Sicherheiten gegen Kompilierungsfehler bieten.
Ein Entwickler fügte einen zweiten Operator in einzeiliges if ein, ohne die Klammern hinzuzufügen.
if (user) initialize(); log_access();
Vorteile:
Nachteile:
Ein Entwickler verwendet immer geschweifte Klammern, selbst für einen Operator:
if (user) { initialize(); log_access(); }
Vorteile:
Nachteile: