2012-01-25 15 views
45

który jest bardziej właściwy sposób do powrotu z funkcji:powrocie z funkcji void

void function() { 
    // blah some code 
} 

LUB

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

Uzasadnieniem Drugi sposób:

  1. Wyraża developer intencje wyraźniej.
  2. Pomaga wykrywania koniec funkcji w pre-kompilacji:

Załóżmy, że masz taki scenariusz-masz kilka funkcji i trzeba wstrzyknąć trochę kodu na końcu tych funkcji. Ale z pewnych powodów nie chcesz/lub nie możesz modyfikować tak dużej ilości funkcji. Co możesz z tym zrobić? 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; 
} 
+3

Ciekawe pytanie, ale głosowaliśmy na zakończenie, ponieważ jest zbyt subiektywne i może powodować pewne konflikty. Prawdopodobnie lepiej dla programistów.stackoverflow.com. Pamiętaj także, aby przeczytać FAQ. –

+4

To raczej kwestia stylu wstawiania zbędnych słów kluczowych. – stacker

+0

@stacker - co jest zbędne w jednej sytuacji, nie jest dla innej ... –

Odpowiedz

48

Żadne z nich nie jest poprawniejsze, więc wybierz. Pusta instrukcja return; jest dostarczana, aby umożliwić powrotu z funkcji innej niż koniec. Nie ma innego powodu, dla którego wierzę.

+1

Dokładnie w tym celu zamierzam go teraz użyć;) – nirvanaswap

22

Pierwszy sposób jest bardziej „poprawne”, co mogłoby tam być zamiar wyrazić? Jeśli kod się skończy, to się kończy. To całkiem jasne, moim zdaniem.

Nie rozumiem, co może być mylące i potrzebuję wyjaśnienia. Jeśli nie używasz konstrukcji pętli, to co może się zdarzyć poza tym, że funkcja przestaje działać?

byłbym severly zirytowany takim bezsensownym dodatkowym return rachunku na koniec void funkcji, ponieważ wyraźnie nie służy żadnemu celowi i po prostu czuję się oryginalna programista powiedział „Byłem zdezorientowany o tym, a teraz można być też! " co nie jest zbyt miłe.

48

Jedynym powodem, aby mieć zysk w funkcji void byłoby przedwcześnie opuścić z powodu jakiejś instrukcji warunkowej ...

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

    // do stuff with y 
} 

Jak odwijania powiedział, gdy kod się kończy, to się kończy. Na końcu nie ma potrzeby wyraźnego powrotu.

+0

co mówi stander ** C **? Używanie 'return;' jest dozwolone w funkcji 'void' return. – roottraveller

1

Stare pytanie, ale i tak odpowiem. Odpowiedź na zadane pytanie brzmi, że nagły powrót jest zbędny i powinien zostać pominięty.

Ponadto proponowana wartość jest fałszywa z następujących względów:

if (ret<0) return; 

redefinicji do C zastrzeżone słowo makro jest to zły pomysł na pierwszy rzut oka, ale ta konkretna propozycja jest po prostu nieobsługiwaną, zarówno jako argument i jako kod.

Powiązane problemy