Согласно 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 ++. Хотя, как предлагает Марк ниже, в C ++ вы можете определить конструктор для структуры point
, который дает более элегантное решение.
<ч />
Кстати, возможность прямого возврата нескольких значений замечательна в таких языках, как Python, которые ее поддерживают:
def foo():
x = 0
y = 20
return x,y # Returns a tuple containing both x and y
>>> foo()
(0, 20)