Return from a void function [closed]

Który jest bardziej poprawnym sposobem powrotu z funkcji:

void function() {
  // blah some code
}

Lub

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

Uzasadnienie dla drugiej drogi:

  1. wyraża intencje dewelopera wyraźniej.
  2. pomaga wykryć koniec funkcji w czasie pre-kompilacji:

Załóżmy, że masz taki scenariusz - masz kilka funkcji i musisz wprowadzić jakiś kod na końcu tych funkcji. Ale z pewnych powodów nie chcesz / nie możesz modyfikować tak dużej ilości funkcji. Co może wiesz o tym ? Return & macro wchodzi w grę, na przykład:

#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;
}
Author: Agnius Vasiliauskas, 2012-01-25

4 answers

Ani nie jest bardziej poprawne, więc wybierz. Instrukcja empty return; jest dostarczana w celu umożliwienia powrotu w funkcji void z miejsca innego niż koniec. Nie wierzę w żaden inny powód.

 52
Author: William Morris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-13 07:59:37

Jedynym powodem, aby mieć return w funkcji void byłoby wcześniejsze wyjście z powodu jakiejś instrukcji warunkowej...

void foo(int y)
{
    if(y == 0) return;

    // do stuff with y
}

Jak powiedział unwind, kiedy Kod się kończy, kończy się. Nie ma potrzeby wyraźnego zwrotu na końcu.

 52
Author: Tevo D,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-25 14:06:19

Pierwszy sposób jest "bardziej poprawny", jaką intencję można wyrazić? Jeśli Kod się skończy, to się skończy. Moim zdaniem to całkiem jasne.

Nie rozumiem, co może być mylące i wymaga wyjaśnienia. Jeśli nie jest używana konstrukcja pętli, to co może się stać poza tym, że funkcja przestaje wykonywać?

Bardzo bym się zirytował takim bezsensownym dodatkowym return stwierdzeniem na końcu void funkcji, ponieważ wyraźnie nie służy cel i sprawia, że czuję, że oryginalny programista powiedział: "byłem zdezorientowany, a teraz ty też możesz być!"co nie jest miłe.

 22
Author: unwind,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-03 14:45:45

Stare pytanie, ale i tak odpowiem. Odpowiedź na zadane pytanie jest taka, że nagi zwrot jest zbędny i powinien zostać pominięty.

Ponadto sugerowana wartość jest fałszywa z następującego powodu:

if (ret<0) return;

Ponowne zdefiniowanie słowa kluczowego C jako makra jest złym pomysłem, ale ta konkretna sugestia jest po prostu bezużyteczna, zarówno jako argument, jak i jako kod.

 1
Author: don provan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-03 17:11:15