Riot: Vermeiden Sie die Verwendung von goto

Erstellt am 6. Juli 2017  ·  6Kommentare  ·  Quelle: RIOT-OS/RIOT

Die Verwendung von goto ist eine schreckliche Programmierpraxis. Es könnte einige Vorteile für die Verwendung im Kerncode geben (ich kann keine sehen), aber verwenden Sie es um Gottes willen nicht in den Beispielen.

Die Datei, die meine Aufmerksamkeit erregt hat, ist RIOT/blob/master/examples/gcoap/gcoap_cli.c, die in Zeile 139 ein goto-Statement enthält, das einfach durch den Code unter dem Label end: (nur zwei Zeilen) ersetzt werden kann.

contested minor cleanup

Alle 6 Kommentare

für das gcoap beispiel hast du sicherlich recht. Andererseits gibt es in RIOT insgesamt ungefähr 30 (etwas) Verwendungen von goto, wenn man bedenkt, dass es sich um ein (eingebettetes) IoT-Betriebssystem handelt, ist diese Anzahl eher gering.

Sie können also gerne eine PR zur Behebung des gcoap-Beispiels bereitstellen, aber ansonsten sehe ich dies (zumindest im Moment) nicht als Problem an.

Die Verwendung von goto ist eine schreckliche Programmierpraxis.

Das ist umstritten. Die Verwendung von goto zur Fehlerbehandlung in C wird von vielen tatsächlich als bewährte Methode angesehen, da dies häufig zu besser lesbarem, weniger fehleranfälligem Code führt.

gcoap_cli.c, die in Zeile 139 ein goto-Statement hat, das einfach durch den Code unter dem Label end: (nur zwei Zeilen) ersetzt werden kann.

Du meinst, den printf-Aufruf duplizieren?

Du meinst, den printf-Aufruf duplizieren?

Ich denke, der Code kann leicht überarbeitet werden, indem if .. else if ... else verwendet wird, wobei goto #$ vermieden wird, ohne die Lesbarkeit zu beeinträchtigen - was nicht in allen Fällen möglich ist, in denen goto verwendet wird.

Du meinst, den printf-Aufruf duplizieren?
Ich denke, der Code kann leicht überarbeitet werden mit ...

Sicher. Ich wollte darauf hinweisen, dass das Kopieren der beiden Zeilen nicht ausreicht.

Es geht nicht darum, die Codezeile zu reduzieren. Es geht um Lesbarkeit und gute Code-Praktiken. Wenn goto anstelle von if...else... verwendet wird, dann gilt "es als schädlich"

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen