Auswertungsreihenfolge bie return



  • Danke für eure Antworten. Zu berniebutt kann ich nur sagen, dass ich mal iwo gelesen habe, dass es in diesem Fall besser ist, auf die lokale Variable zu verzichten. Ist schließlich eine Operation mehr und mehr Speicher wird benötigt...



  • BootLag-BootLag- schrieb:

    Ist schließlich eine Operation mehr und mehr Speicher wird benötigt...

    Nö. Das optimiert der Compiler alles weg.



  • Der Returnwert einer Funktion ist ein festgelegter Datentyp, z.B ein int, ein Zeiger, oder eine Struktur. Deshalb führe ich wenn zweckmässig eine lokale Grösse für diesen Datentyp ein, die ich in der Funktion sicher prüfen kann, wo sie bestimmt wird. Jedenfalls übergebe ich im return ungarn mir unklare Ausdrücke.

    Mag sein, dass dieser Vorschlag nicht jedem gefällt. Kostet aber kaum Performance und Speicherbedarf. Der Fragesteller wusste nicht, wie der Ausdruck abgearbeitet wird und ob das wie sogar compilerabhängig sein kann.

    Mein bewährter Weg: Alle Funktionalität geprüft in der Funktion erledigen und für einen eindeutigen sicheren Rückgabewert sorgen. Wenn das in Ordnung ist, kann man die Internas der Funktion für eine Weile vergessen!

    Idealer Name rtn? Mir egal, da bin ich schreibfaul! Wäre nach ungarischer Notation intReturn besser??



  • berniebutt schrieb:

    Der Fragesteller wusste nicht, wie der Ausdruck abgearbeitet wird und ob das wie sogar compilerabhängig sein kann.

    Ob der Ausdruck in einem return-Statement oder auf der rechten Seite einer Zuweisung steht, spielt doch dafür keine Rolle. Er weiß doch dann so oder so nicht, wie er abgearbeitet wird.

    Davon abgesehenn ist die richtige Reaktion auf die Feststellung, dass man etwas nicht weiß, dass man es nachschlägt und lernt. Insbesondere wenn es absolut elementare Grundlagen sind. Ansonsten gibt es auch einfachere Sprachen wie Visual Basic, nicht jeder muss C++ schreiben.



  • berniebutt schrieb:

    Der Returnwert einer Funktion ist ein festgelegter Datentyp, z.B ein int, ein Zeiger, oder eine Struktur. Deshalb führe ich wenn zweckmässig eine lokale Grösse für diesen Datentyp ein, die ich in der Funktion sicher prüfen kann, wo sie bestimmt wird. Jedenfalls übergebe ich im return ungarn mir unklare Ausdrücke.

    Mag sein, dass dieser Vorschlag nicht jedem gefällt. Kostet aber kaum Performance und Speicherbedarf. Der Fragesteller wusste nicht, wie der Ausdruck abgearbeitet wird und ob das wie sogar compilerabhängig sein kann.

    Mein bewährter Weg: Alle Funktionalität geprüft in der Funktion erledigen und für einen eindeutigen sicheren Rückgabewert sorgen. Wenn das in Ordnung ist, kann man die Internas der Funktion für eine Weile vergessen!

    Idealer Name rtn? Mir egal, da bin ich schreibfaul! Wäre nach ungarischer Notation intReturn besser??

    Das klingt etwas zu stark nach C des vergangenen Jahrhunderts.



  • volkard schrieb:

    Das klingt etwas zu stark nach C des vergangenen Jahrhunderts.

    Vergangenes Jahrhundert? Da hat man doch mit Assembler, ALGOL, FORTRAN, PL1 ... und auch C auf Dampfrechnern herumgeturnt - Igitt! Wegen hier kritisiertem Ansatz zur Steinzeitprogrammierung kein Thema für mich. Ist zu einfach und nachlesbar. Wieso dann solche Fragen, wenn C++ und OOP alles so leicht macht? daddeldu! :p



  • Welcher Wert zurückgegeben wird kann man im Debugger auch ohne Hilfsvariable nachgucken.
    "rtn" als Name ist schlecht, weils total unüblich ist, nicht aussprechbar und nicht sprechend.
    Wenn schon nen nichtssagenden Namen, dann wenigstens sowas wie "rc" oder "value".



  • hustbaer schrieb:

    Wenn schon nen nichtssagenden Namen, dann wenigstens sowas wie "rc" oder "value".

    rc habe ich noch nie gesehen. Wofuer steht das?

    val, ret, res - sind die Sachen die ich frueher oefters gesehen habe.



  • Hm. Dann habe ich die Häufigkeit/Geläufigkeit von "rc" wohl etwas überbewertet 🙂
    "rc" steht für "return code".

    Verwende ich auch nur für Fälle wo es eben ein "return code" ist, also ein success/error Code o.ä.
    Wenns dagegen ein anderer Wert ist (String-Länge, Koordinate, Anzahl von irgendwas etc.) ist "rc" natürlich auch nicht gut.



  • also rtn ist schlecht, weil es in modernem Spaß-C rtrn heißen müßte (Einfach alle Vokale weglassen! Das gibt wenigstens eine Fehlererkennungshilfe.) Und weil man ja überhaupt keinen return returnen will ist es oberschlecht. Auch vom Sinn her nicht erschließbar. Oder nennt Ihr Eure Variablen nach Schlüsselwörtern, die gerade irgendwas mit dem Zweck zu tun haben? fr statt i und whl statt isRunning? Aber schön traditionell auf drei Zeichen pro Bedeutungsinhalt gekürzt. Helau. 🤡

    Sondern erträglich wären einen vl oder rtrnvl oder ein rslt. Ach, dann kann man das rslt doch gleich auch result nennen. Schade, daß man das überhaupt noch sagen muß.



  • result nehm ich manchmal dafür.

    hustbaer schrieb:

    Welcher Wert zurückgegeben wird kann man im Debugger auch ohne Hilfsvariable nachgucken.

    In welchem Debugger und wie? Beim MSVC geht es m.W. nicht. Ich bin jemand, der sich davon nicht den Stil diktieren lässt, aber einige Kollegen definieren genau deshalb grundsätzlich Variablen, die sie dann zurückgeben.



  • Bashar schrieb:

    In welchem Debugger und wie? Beim MSVC geht es m.W. nicht.

    Sobald die Funktion verlassen wurde stehen im MSVC bei den "Autos" die Werte, die die gerade aufgerufenen Funktionen zurückgegeben haben.



  • Bashar schrieb:

    result nehm ich manchmal dafür.

    hustbaer schrieb:

    Welcher Wert zurückgegeben wird kann man im Debugger auch ohne Hilfsvariable nachgucken.

    In welchem Debugger und wie? Beim MSVC geht es m.W. nicht. Ich bin jemand, der sich davon nicht den Stil diktieren lässt, aber einige Kollegen definieren genau deshalb grundsätzlich Variablen, die sie dann zurückgeben.

    Einen Debugger verwende ich selten. Stattdessen benutze ich lieber Logfiles, die ich mir in Ruhe ansehen kann. Und genau dafür brauche auch ich Variable als Rückgabe einer Funktion. result kommt da manchmal auch vor. Ist alles nun auch wieder ein Programmierstil des vergangenen Jahrhunderts. Dafür übersichtlich und beim Testen (jedenfalls für mich) effizient.

    Die Frage, in welcher Reihenfolge etwas abgearbeitet wird, kann man nachlesen oder im Ergebnis (in der Funktion!) ausprobieren. Suchen und Lesen ist manchmal aufwendiger als Probieren, nur verstanden hat man damit wenig! Die Reihenfolge für C/C++ liegt doch fest. Das war bei Mixed-Programming MASM/FORTRAN/PASCAL/C für den Stack einmal anders und etwas schwieriger zu handhaben.

    Der Steinzeitprogrammierer verabschiedet sich nun endgültig aus diesem Thema. 🙂



  • pumuckl schrieb:

    Sobald die Funktion verlassen wurde stehen im MSVC bei den "Autos" die Werte, die die gerade aufgerufenen Funktionen zurückgegeben haben.

    Das stimmt zwar, aber man kann sie bei strukturierten Typen nicht aufklappen.


Anmelden zum Antworten