Rückkehr von einer void-Funktion [closed]

Lesezeit: 3 Minuten

Benutzeravatar von Agnius Vasiliauskas
Agnius Wassilauskas

Was ist der korrektere Weg, um von der Funktion zurückzukehren:

void function() {
  // blah some code
}

ODER

void function() {
  // blah some code
  return;
}

Begründung für den zweiten Weg:

  1. Es drückt die Absichten der Entwickler klarer aus.
  2. Es hilft, das Funktionsende zum Zeitpunkt der Vorkompilierung zu erkennen:

Angenommen, Sie haben ein solches Szenario – Sie haben eine Reihe von Funktionen und müssen am Ende dieser Funktionen Code einfügen. Aber aus irgendwelchen Gründen wollen / oder können Sie diese riesige Menge an Funktionen nicht ändern. Was kannst du dagegen tun? Return & macro kommt zum Beispiel ins Spiel:

#include<stdio.h>

#define MAX_LINES 1000
#define XCAT(a,b) a##b
#define CAT(a,b) XCAT(a,b)
#define return returns[__LINE__] = 1;\
        if (returns[__LINE__])\
           {printf("End of function on %d line.\n",__LINE__);}\
        int CAT(tmp,__LINE__); \
        if ((CAT(tmp,__LINE__)=returns[__LINE__], returns[__LINE__] = 0, CAT(tmp,__LINE__)))\
              return

static int returns[MAX_LINES];


void function1(void) {
    return;
}

void function2(void) {
    return;
}

int main()
{
    function1();
    function2();

    return 0;
}

  • Interessante Frage, aber für das Schließen gestimmt, weil sie viel zu subjektiv ist und wahrscheinlich zu Konflikten führen wird. Möglicherweise besser für programers.stackoverflow.com. Denken Sie auch daran, die FAQ zu lesen.

    – Richard J.Ross III

    25. Januar 2012 um 13:12 Uhr

  • Es ist eher eine Frage des Stils, überflüssige Keywords einzufügen.

    – Stapler

    25. Januar 2012 um 13:17 Uhr

  • @stacker – was für eine Situation überflüssig ist, ist es für eine andere nicht …

    – Agnius Vasiliauskas

    25. Januar 2012 um 14:05 Uhr

  • Das Überladen eines Keywords ist wirklich gefährlich, insbesondere wenn es so unqualifiziert wie hier gemacht wird. Wenn die return-Anweisung die abhängige Anweisung von an ist if Sie ändern die Semantik des Programms vollständig. Tun Sie solche Dinge nicht.

    – Jens Gustedt

    25. Januar 2012 um 16:09 Uhr

  • Solche Leute kommen vielleicht aus der Welt der Assemblersprache, wo a ret Unterricht ist Pflicht

    – linquie

    11. September 2013 um 6:26 Uhr

Benutzeravatar von William Morris
William Morris

Beides ist nicht richtiger, also treffen Sie Ihre Wahl. Die leere return; Anweisung wird bereitgestellt, um a Rückkehr in einem void Funktion von irgendwo anders als dem Ende. Kein anderer Grund, glaube ich.

Benutzeravatar von Tevo D
Tevo D

Der einzige Grund für eine Rückkehr in eine void-Funktion wäre das vorzeitige Beenden aufgrund einer bedingten Anweisung:

void foo(int y)
{
    if(y == 0) return;
    else
    // more code here
}

Wie Unwind sagte: Wenn der Code endet, endet er. Keine Notwendigkeit für eine explizite Rückkehr am Ende.

  • was bedeutet die C standard sagt? Die Nutzung ist legal return; in void Rückgabefunktion.

    – Wurzelreisender

    13. August 2017 um 5:44 Uhr

Benutzeravatar von unwind
entspannen

Der erste Weg ist “richtiger”, welche Absicht könnte es zum Ausdruck bringen? Wenn der Code endet, endet er. Das ist meiner Meinung nach ziemlich klar.

Ich verstehe nicht, was möglicherweise verwirrend sein könnte und klärungsbedürftig ist. Wenn kein Schleifenkonstrukt verwendet wird, was könnte dann passieren, außer dass die Funktion nicht mehr ausgeführt wird?

Ich würde mich über so ein sinnloses Extra sehr ärgern return Erklärung am Ende von a void Funktion, da es eindeutig keinen Zweck erfüllt und mir nur das Gefühl gibt, dass der ursprüngliche Programmierer sagte: “Ich war darüber verwirrt, und jetzt können Sie es auch sein!” was nicht sehr schön ist.

Eine alte Frage, aber ich antworte trotzdem. Die Antwort auf die eigentlich gestellte Frage lautet, dass die bloße Rückgabe überflüssig ist und weggelassen werden sollte.

Außerdem ist der vorgeschlagene Wert aus folgendem Grund falsch:

if (ret<0) return;

Ein C-reserviertes Wort als Makro neu zu definieren, ist auf den ersten Blick eine schlechte Idee, aber dieser spezielle Vorschlag ist einfach nicht tragbar, sowohl als Argument als auch als Code.

1417230cookie-checkRückkehr von einer void-Funktion [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy