Ich arbeite an Embedded-Programm und in bestimmten Fällen, wenn eine Bedingung nicht gemeint ist, möchte ich so schnell wie möglich von der Funktion zurückkehren. wenn ich den folgenden Code habe und Embedded Programming mache:
%Vor%Meine Frage ist, ist es schlecht, mehrere Return-Statements zu haben? Ist es eine schlechte Übung? Gibt es bessere Methoden? Sagt MISRA etwas darüber?
HINWEIS: Diese Frage bezieht sich insbesondere auf Embedded Systems, hat mit MISRA nicht nur C / C ++ zu tun
Danke ...
MISRA benötigt eine einzelne Return-Anweisung:
(MISRA, Regel 14.7: erforderlich) "Eine Funktion muss einen einzigen Ausgangspunkt am Ende der Funktion"
haben
Nun, persönlich denke ich nicht, dass es eine gute Regel ist. Minimieren Sie die Anzahl der Rückgabeanweisungen, verwenden Sie jedoch eine return-Anweisung, wenn die Lesbarkeit Ihres Codes verbessert wird.
Zum Beispiel können Wächterklauseln Ihren Code sauberer und lesbarer machen.
Ich empfehle Ihnen, diesen Artikel über duffing zu lesen (Code von oben nach unten schreiben):
Ich hätte das so geschrieben, weil else
überflüssig ist:
Ich glaube nicht, dass es eine Faustregel gibt, aber wenn die Funktion wirklich lang ist und Sie mehrere Rückkehrpunkte haben, kann es schwierig sein, sie zu pflegen und zu verstehen.
In einer rekursiven Funktion ist es jedoch sehr praktisch, Ihre "Basisfälle" als Return-Anweisungen am Anfang einer Funktion zu setzen.
Betrachten Sie zum Beispiel faktoriell:
%Vor%Sie könnten es auch so schreiben:
%Vor%Ich mag den ersten Weg besser, aber es bedeutet nicht, dass jeder Weg besser ist als der andere.
Es kommt wirklich darauf an, welchen Standards Sie auch folgen und welche Vorlieben Sie haben.
Es ist vollkommen akzeptabel, mehrere Rückgabeanweisungen in einer Funktion zu haben. In der Tat können mehrere Rückgabeanweisungen in einer Funktion wie der oben aufgeführten zu Verbesserungen der Leistung und Lesbarkeit führen. Zum Beispiel brauchen Sie den Block else
in der obigen Funktion nicht, weil Sie von der Funktion zurückkehren, wenn die Bedingung erfüllt ist.
Stellen Sie nur sicher, dass wenn Ihre Funktion keinen Rückgabetyp von void
hat, Sie am Ende eine return-Anweisung haben und dass alle return-Anweisungen diesen Typ zurückgeben. Zum Beispiel, wenn Ihre Funktion wie folgt deklariert ist:
Dann müssen alle Ihre Return-Anweisungen ganze Zahlen zurückgeben, und Sie sollten am Ende eine Ganzzahl zurückgeben, egal was passiert. Aber wenn Ihre Funktion einen Rückgabetyp von void hat, wie folgt:
%Vor% Wenn Sie das Ende der Funktion erreichen und kein Schlüsselwort return
haben, kehrt die Funktion automatisch zurück.