Nach Angaben der C FAQ :
Die Bedeutung des Komma-Operators im allgemeinen Ausdruck ist genau genommen
e1 , e2
ist "evaluiere den Unterausdruck e1, dann evaluiere e2; der Wert des Ausdrucks ist der Wert von e2". Daher sollte e1 besser eine Zuweisung oder ein Inkrement ++ oder Dekrement -- oder einen Funktionsaufruf oder eine andere Art von Nebeneffekt beinhalten, da sonst ein Wert berechnet würde, der verworfen würde.
Ich stimme also mit Ihnen überein, Es gibt keinen Grund außer um zu zeigen, dass dies eine gültige Syntax ist, wenn überhaupt.
Wenn Sie beide Werte in C oder C++ zurückgeben wollten, könnten Sie eine struct
mit x
y y
Mitglieder, und geben Sie stattdessen die Struktur zurück:
struct point {int x; int y;};
Sie können dann einen Typ und eine Hilfsfunktion definieren, die es Ihnen ermöglichen, beide Werte einfach innerhalb der struct
:
typedef struct point Point;
Point point(int xx, int yy){
Point p;
p.x = xx;
p.y = yy;
return p;
}
Ändern Sie dann Ihren ursprünglichen Code, um die Hilfsfunktion zu verwenden:
Point foo(){
int x=0;
int y=20;
return point(x,y); // x and y are both returned
}
Und schließlich können Sie es ausprobieren:
Point p = foo();
printf("%d, %d\n", p.x, p.y);
Dieses Beispiel lässt sich sowohl in C als auch in C++ kompilieren. Obwohl, wie Mark unten vorschlägt, kann man in C++ einen Konstruktor für die point
Struktur, die eine elegantere Lösung bietet.
Nebenbei bemerkt, ist die Möglichkeit, mehrere Werte direkt zurückzugeben, in Sprachen wie Python, die dies unterstützen, wunderbar:
def foo():
x = 0
y = 20
return x,y # Returns a tuple containing both x and y
>>> foo()
(0, 20)