2016-02-22 22 views
8

Oft sehe ich Code wie diesen (C, C++ und Java manchmal):Klammern um Rückgabewerte - warum?

return (value); 

Ich sehe keinen Nutzen dieser Klammern. Also meine Frage ist, haben die Programmierer return angenommen, um irgendeine Art von Funktion mit dem Rückgabewert als Argument oder gibt es wirklich Fälle, wo diese Klammern Sinn machen?

Ich verstehe, dass eine ähnliche Frage bereits here gestellt wurde, aber das bezieht sich nur auf ANSI C. Ich frage mich, ob es bestimmte C++ - oder Java-spezifische Aspekte gibt, die dort nicht beantwortet wurden.

+1

'return' ist eine Anweisung und die _parentheses_ (" Klammern "wird für die' [] 'verwendet) sind nutzlos. Grammatisch sind sie Teil des Ausdrucks, nicht der Aussage. Moderne Codierungsstile raten oft davon ab, sie zu verwenden. – Olaf

+0

@WillBriggs: Nun, es tut grammatikalisch. Das könnte sehr gut für die Code-Analyse relevant sein. – Olaf

+0

Klammern wie diese unterdrücken Konvertierungswarnungen vom Typ des Werts zum Rückgabetyp der Funktion? Ich weiß, dass einige andere Warnungen, wie Zuweisungen in bedingten Anweisungen, mit zusätzlichen Parens unterdrückt werden können. – Sqeaky

Antwort

17

bezüglich C

Klammern werden gesetzt, wo ein Ausdruck ist, und man möchte den Rückgabewert, der Wert des Ausdrucks sein. Auch dann sind Klammern nicht erforderlich. Es ist völlig in Ordnung, so etwas wie

return x + y; 

Programmierer schreiben macht es return (x + y);, um es besser lesbar zu machen.

Also, Putting Klammern ist eine Frage der Meinung und Praxis.


In Bezug auf C++

Es gibt einen Fall, in dem obskuren Angelegenheiten Klammern. Zitiert this Frage

int var1 = 42; 
decltype(auto) func1() { return var1; } // return type is int, same as decltype(var1) 
decltype(auto) func1() { return(var1); } // return type is int&, same as decltype((var1)) 

Sie können die zurückgegebenen Werte sehen verschieden sind, und das ist aufgrund der runden Klammern. Sie können durch this Antwort gehen, um im Detail zu verstehen.


In Bezug auf Java macht Klammern keinen Unterschied.

Codierung Konvention schlägt mit

return x + y; 

zu gehen, um mehr zu verstehen, lesen Sie this Antwort.


HINWEIS: Ich weiß nicht viel über Java und C++. Der gesamte Inhalt meiner Antwort zu Java und C++ ist aus anderen Antworten entnommen. Ich habe dies getan, um die verschiedenen Konventionen für die drei Sprachen zu konsolidieren.

+0

Zusammenfassung: "Also, Klammern setzen ist eine Frage der Meinung und Praxis. ". Groß!! –

+4

"um es lesbarer zu machen" - nicht sicher, es kann auch irreführend sein, weil es wie ein Funktionsaufruf aussieht. –

+4

@FrankPuffer, nein, tut es nicht. – SergeyA

4

Technisch gibt es keinen Grund, den Ausdruck return in Klammern zu setzen. Es ist wirklich eine Frage des Geschmacks.

Das heißt, ich werde in der Regel ein return Ausdruck Klammern, wenn es Boolean Operatoren verwendet. Da solche Operatoren in der Regel als Teil einer while oder if gesehen werden, macht es mehr klar, dass Sie etwas mit diesem Wert neben meiner Meinung nach springen wollen.

int out_of_range(int x) 
{ 
    return ((x < 1) || (x > 10)); 
} 
1

Meist Legacy. K & R C Programmiersprache (1978) zeigt Renditen mit Klammern.Es ist möglich, dass einige alte C-Compiler dies benötigten, aber ich bin mir nicht sicher.

Verwandte Themen