Klammern um Rückgabewerte in C

Lesezeit: 6 Minuten

Benutzeravatar von Tooony
Tooony

Ziemlich oft kann ich in ANSI C-Code Klammern sehen, die einen einzelnen Rückgabewert umgeben.

So was:-

int foo(int x) {
  if (x)
    return (-1);
  else
    return (0);
}

Warum in diesen Fällen () um den Rückgabewert herum verwenden? Irgendwelche Ideen? Ich sehe dafür keinen Grund.

  • So sieht es aus wie ein Funktionsaufruf ;-).

    – Toon Krijthe

    2. Oktober 2008 um 11:55 Uhr

  • Aber return ist kein Funktionsaufruf, es sei denn, Sie sind ein Schemer. 😛

    – C. K. Young

    2. Oktober 2008 um 11:59 Uhr

  • Tooony: Ich möchte wissen, warum Leute auch unnötige Klammern für sizeof setzen!

    – C. K. Young

    2. Oktober 2008 um 11:59 Uhr

  • Während post hoc häufig ergonomische Begründungen für die Gewohnheit angeboten werden, lohnt es sich, sich moderne Sprachen anzusehen, die return-Anweisungen haben, und zu fragen, ob dieselbe Konvention existiert. AFAIK ist die Antwort ein klares NEIN. Die Antwort von User10392 ist insofern interessant, als sie einen C-spezifischen Vorteil bietet, der sich aus der Gewohnheit ergibt.

    – AmigoNico

    19. Juni 2013 um 2:33 Uhr


  • Mögliches Duplikat von Sind Klammern um das Ergebnis in einer Rückgabeanweisung von Bedeutung?

    – phuklv

    17. Mai 2017 um 12:41 Uhr

Benutzeravatar von Adam Haile
Adam Haile

Es gibt wirklich keinen Grund … es ist nur eine alte Konvention.

Um Platz zu sparen, würden Programmierer die letzten Berechnungen oft in der Rückgabezeile statt in einer eigenen Zeile durchführen, und die Klammern stellen sicher, dass sie hauptsächlich vorhanden sind, um leichter zu erkennen, dass es sich um eine einzelne Anweisung handelt, die zurückgegeben wird, wie hier:

return (x+i*2);

Anstatt von

int y = x+i*2;
return y;

Die Klammern wurden zur Gewohnheit und blieben hängen.

  • Ich neige dazu, es zu tun, wenn ich Mathe so zurückgebe. Ich weiß nicht, es ist, als hätte ich Angst, dass die Methode zurückkehrt, bevor die Berechnung abgeschlossen ist, oder so etwas oO

    – Wes P

    2. Oktober 2008 um 12:30 Uhr

  • Ich bin froh, dass nicht nur ich dachte, dass es unnötig ist. 😉 Klammern zum Setzen der Priorität von sind verständlich, aber meiner Meinung nach sollte eine return-Anweisung wie oben in mehrere Anweisungen aufgeteilt werden. Erhöht die Lesbarkeit und ist weniger fehleranfällig. Trauen Sie sich, Nein zur Wurstnotation zu sagen! 😉

    – Tooony

    2. Oktober 2008 um 14:03 Uhr

  • “Die Klammern stellen meistens sicher, dass es einfacher ist zu erkennen, dass es sich um eine einzelne Anweisung handelt, die zurückgegeben wird” – was soll das überhaupt bedeuten? Abgesehen von der Grammatik können Sie keine Anweisungen zurückgeben, und es wird mehr Platz benötigt als ohne Klammern.

    – Erinnere dich an Monika

    17. Oktober 2014 um 11:31 Uhr

  • Tut mir leid, eine so alte Antwort wiederzubeleben, aber es gibt sie tatsächlich ist ein Grund. In den sehr frühen Tagen von C, bevor es standardisiert wurde, waren die Klammern von der Syntax erforderlich. Beziehen auf cm.bell-labs.com/cm/cs/who/dmr/cman.ps.

    – Segmentiert

    27. März 2015 um 23:22 Uhr

  • @MarcLehmann Ich habe keine Ahnung, was es bedeuten soll oder wie es so hoch gestimmt und akzeptiert wurde. Das Hinzufügen von Klammern sieht für mich einfach hässlich aus (ich könnte sie sogar loswerden für if et al, wenn ich König wäre). Wie für make it easier to see that it is a single statement that is returnederstens, das ist ein Ausdruckkeine “Aussage” – & was – denken die Leute return ist ein gieriger Betreiber und das return x+i*2 könnte zurückkehren x und den Rest verwerfen? Wenn ja, wow. Oder dachte diese Antwort wirklich an lange Ausdrücke, die sich über mehrere Zeilen erstrecken könnten? Wie auch immer, es hat seinen eigenen Punkt völlig verfehlt.

    – Unterstrich_d

    30. Juli 2016 um 23:36 Uhr


Ein praktisches, aber unwahrscheinliches Motiv ist, wenn Sie den Wert in Klammern setzen, Rückgabe als Makro definieren und dann Protokollcode einfügen, um alle Ihre Rückgaben zu überwachen.

  • Wow! Es mag unwahrscheinlich sein, aber dies ist das einzige Motiv, das ich je für die Angewohnheit gehört habe, die nicht auf „Oh, naja, jemand dachte wahrscheinlich, es könnte besser aussehen oder konsistenter sein“ hinausläuft, von denen keines jemals auch nur im Entferntesten schien überzeugend für mich. Danke für dieses Stückchen Vernunft!!

    – AmigoNico

    19. Juni 2013 um 2:18 Uhr


  • Interessante Beobachtung. Bei meinen Experimenten ist mir aufgefallen, dass ein Makro für definiert ist Rückkehr scheint Makroargumente ohne Klammern zuzulassen, aber ein Makro, das für einen anderen Namen definiert ist (z Quadrat) nicht. Ich glaube, ich habe dieses Mal in den Abgrund geschaut…

    – Alain O’Dea

    29. August 2015 um 15:20 Uhr

  • … hoffen wir besser, dass niemand eine Funktion aufruft oder einen Inkrementoperator verwendet oder andere Nebeneffekte in seinen Rückgabeanweisungen hat.

    – Karl Norum

    29. September 2016 um 18:18 Uhr

  • Dies ist ein starkes Argument dafür, keine Klammern für return-Anweisungen zu verwenden

    – nowox

    7. Dezember 2017 um 10:54 Uhr

  • @polynomial_donut – Wenn Sie einen Ausdruck in Ihrer Rückgabeanweisung hatten, können normale makrobezogene Probleme wie Mehrfachauswertung auftreten.

    – Karl Norum

    19. September 2018 um 17:45 Uhr

Benutzeravatar von rakslice
rakslice

In der ursprünglichen C-Spezifikation waren Klammern um den Rückgabewert erforderlich. Während moderne C-Compiler und der ANSI-C-Standard sie nicht benötigen, wirkt sich das Vorhandensein von Klammern nicht auf den Rückgabewert aus, und Programmierer schließen sie manchmal aus Gewohnheit, Unkenntnis der Standards, aus Gründen der Konsistenz mit einer stilistischen Konvention ein, die sie erfordert. oder möglicherweise für die Abwärtskompatibilität.

Ich sollte hinzufügen, für Leute, die über C++ nachdenken: Dies Frage bezieht sich auf C und C ist nicht C++; Dies sind zwei verschiedene Sprachen mit unterschiedlichen Standards, Fähigkeiten, Schwierigkeitsgraden und unterschiedlichen Verwendungsstilen, die sich herausbilden – was immer sie gemeinsam haben, es ist ratsam, sie als zwei völlig getrennte Dinge zu behandeln. Eine ähnliche Frage zu C++ finden Sie unter Sind Klammern um das Ergebnis in einer return-Anweisung von Bedeutung?.

  • IMHO ist dies die einzige vernünftige/überzeugende Antwort (da sie erklärt, woher eine seltsame Angewohnheit stammen kann). Ich bin hierher gekommen. SO: Sind Klammern um das Ergebnis in einer Rückgabeanweisung von Bedeutung? Ich habe gerade einen weiteren signifikanten Unterschied zwischen C und C++ gelernt …

    – Scheffs Katze

    24. April 2019 um 10:11 Uhr

Mein persönlicher Stil ist es, bei komplexen Ausdrücken Klammern zu verwenden; z.B,

return (a + b);

aber sie nicht zu verwenden, wenn der Ausdruck ein einfacher Begriff ist

return a;

Ich kann nicht sagen, warum ich das so mache; nur etwas, das ich vor langer Zeit aufgegriffen habe.

Übrigens denke ich, dass es wie ein Funktionsaufruf aussieht:

return(a);  // ugh

ist unglaublich hässlich und einfach falsch.

Es gibt ein paar Gründe:

  1. wenn/während/für/etc. sind alles Steuerschlüsselwörter, die Klammern haben müssen. Daher erscheint es oft selbstverständlich, sie immer auch bei der Rückgabe anzulegen.

  2. sizeof ist das einzige andere Schlüsselwort, das sie haben kann oder nicht, außer dass Sie in einigen Fällen muss verwenden Sie Klammern. So ist es einfacher, sich daran zu gewöhnen, immer Parens zu verwenden. für sizeof, was eine Logik impliziert: Wenn du kannst, tue es immer.

  3. case/goto sind die einzigen Schlüsselwörter, bei denen Sie niemals Klammern verwenden. … und die Leute neigen dazu, diese als Sonderfälle zu betrachten (und möchten, dass sich beide von anderen Kontrollschlüsselwörtern abheben, insbesondere goto).

Benutzeravatar von Stein G. Strindhaug
Stein G. Strindhaug

Wenn Sie -1 wie in Ihrem Beispiel zurückgeben, ist es meiner Meinung nach mit der Klammer besser lesbar, da das Minus besser sichtbar ist:

return 1

oder

return -1

oder

return (-1)

Benutzeravatar von James Jones
James Jones

Vielleicht ist es Brauch – schließlich kamen die Leute, die uns Unix und C brachten, aus dem Multics-Projekt. Multics wurde in PL/I geschrieben, und in PL/I sind die Klammern obligatorisch.

1418740cookie-checkKlammern um Rückgabewerte in C

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

Privacy policy