C / C ++ bedingte Rückgabeanweisungen [duplizieren]

8

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 ...

    
user1135541 18.06.2013, 19:29
quelle

5 Antworten

14

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):

    
ouah 18.06.2013, 19:32
quelle
3

Ich hätte das so geschrieben, weil else überflüssig ist:

%Vor%

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.

    
dcp 18.06.2013 19:33
quelle
1

Einige halten es für eine schlechte Übung, ich bin persönlich damit einverstanden, da es sauberer aussehenden Code sein kann. Sie können es auch so machen:

%Vor%     
mark 18.06.2013 19:35
quelle
0

Mehrere Rückgabeanweisungen sind in C / C ++ perfekt gültig. Stellen Sie jedoch sicher, dass mindestens eine der return-Anweisungen immer ausgeführt wird. Die folgende Funktion ist falsch,

%Vor%

solche Situationen sollten in C / C ++ vermieden werden.

    
Deepu 18.06.2013 19:36
quelle
0

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:

%Vor%

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.

    
creXALBO 18.06.2013 19:38
quelle

Tags und Links