C FAQによると:
正確に言うと、一般式でのコンマ演算子の意味
e1、e2
は「部分式e1を評価し、次にe2を評価します。式の値はe2の値です。」したがって、e1には、割り当て、インクリメント++、デクリメント、または関数呼び出しやその他の種類の副作用が含まれている方がよいでしょう。そうしないと、破棄される値が計算されるためです。
ですから、私はあなたに同意します。もしそうなら、これが有効な構文であることを説明する以外に意味はありません。
CまたはC++で両方の値を返したい場合は、struct
包含メンバーx
とy
メンバーを作成し、代わりに構造体を返すことができます。
struct point {int x; int y;};
次に、タイプとヘルパー関数を定義して、struct
:内の両方の値を簡単に返すことができます。
typedef struct point Point;
Point point(int xx, int yy){
Point p;
p.x = xx;
p.y = yy;
return p;
}
次に、ヘルパー関数を使用するように元のコードを変更します。
Point foo(){
int x=0;
int y=20;
return point(x,y); // x and y are both returned
}
そして最後に、あなたはそれを試すことができます:
Point p = foo();
printf("%d, %d\n", p.x, p.y);
この例は、CとC++の両方でコンパイルされます。ただし、Markが以下に示唆しているように、C ++ではpoint
、より洗練されたソリューションを提供する構造体のコンストラクターを定義できます。
ちなみに、複数の値を直接返す機能は、それをサポートするPythonなどの言語では素晴らしいものです。
def foo():
x = 0
y = 20
return x,y # Returns a tuple containing both x and y
>>> foo()
(0, 20)