48 Stimmen

C++ -- return x,y; Was soll das bringen?

Ich programmiere schon seit ein paar Jahren in C und C++ und nehme jetzt gerade an einem College-Kurs teil, und in unserem Buch gab es eine Funktion wie diese als Beispiel:

int foo(){
  int x=0;
  int y=20;
  return x,y; //y is always returned
}

Eine solche Syntax habe ich noch nie gesehen. In der Tat habe ich noch nie die , Operator außerhalb von Parameterlisten verwendet. Wenn y immer zurückgegeben wird, was ist dann der Sinn? Gibt es einen Fall, in dem eine Return-Anweisung auf diese Weise erstellt werden muss?

(Außerdem habe ich auch C markiert, weil es für beide gilt, obwohl mein Buch speziell C++ ist)

1voto

osgx Punkte 85299

Dies ist der Komma-Operator. Diese Syntax kann verwendet werden, um die Warnung des Compilers über unbenutzte Variablen auszuschalten x .

1voto

nategoose Punkte 11636

Außerhalb von for-Schleifen wird der Komma-Operator (im Gegensatz zur Funktionsaufruf-Version) hauptsächlich in Makros verwendet, die einen Wert zurückgeben, nachdem sie etwas getan haben. Es gibt jetzt andere Möglichkeiten, dies zu tun, aber ich denke, dass der Komma-Operator früher die sauberste Methode war.

#define next(A, x, y, M) ((x) = (++(y))%(M) , A[(x)])

Bitte beachten Sie, dass dieses Makro ein schlechtes Beispiel für Makros im Allgemeinen ist, weil es x wiederholt und wahrscheinlich aus anderen Gründen. Die Verwendung des Kommaoperators auf diese Weise sollte selten sein. Das Beispiel aus Ihrem Buch war wahrscheinlich ein Versuch, ein Codebeispiel in die für dieses Beispiel verfügbare Zeilenzahl einzupassen.

1voto

Olaseni Punkte 7500

Einerseits könnte es sich um einen ehrlichen Fehler des Autors handeln.

Andererseits könnte der Autor syntaktisch korrekten Code erläutern, im Gegensatz zu Compiler-Warnungen.

In jedem Fall wäre die einzige Möglichkeit, mehrere Ergebnisse zurückzugeben, die Definition einer Klasse und die Verwendung ihrer Instanz oder vielleicht ein Array oder eine Sammlung.

0voto

d hughes Punkte 1

Gibt es einen Fall, in dem eine Return-Anweisung wie diese erstellt werden muss?

IMO würde ich niemals mehrere Rückgaben in einer Funktion wie im Buchbeispiel verwenden. Das verstößt gegen den strukturierten Entwurf. Dennoch gibt es viele Programmierer, die das tun! Beim Debuggen des Codes einer anderen Person habe ich einer globalen Variablen in jeder Return-Anweisung einen Wert zugewiesen, um herauszufinden, welcher Return ausgeführt wurde.

0voto

SRC Punkte 415

Ich habe gesehen, dass diese Syntax in C verwendet wird, um Housekeeping zu betreiben, wenn man auf halbem Weg in einer Operation zurückkehrt. Definitiv kein wartbarer Code:

int foo(int y){
  char *x;
  x = (char*)malloc(y+1);
  /** operations */
  if (y>100) return free(x),y;
  /** operations */
  if (y>1000) return free(x),y;

}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X