I have read that comma operator is used to assign expression, and the right expression is supplied to lvalue.
But why does this program assign left expression to lvalue when not using parenthesis? I am using turbo c compiler.
int b=2;
int a;
a=(b+2,b*5); // prints 10 as expected
a=b+2,b*5; // prints 4 when not using parenthesis
Also the following works:
int a =(b+2,b*5);
But this generates an error:
int a =b+2,b*5; // Error
I can't understand why.
Because precedence of
,
operator is lower than of=
one, this...a=b+2,b*5;
... will actually be evaluated as...
With
int i = b + 2, b * 5;
is a bit different, because comma has different meaning in declaration statements, separating different declarations from each other. Consider this:You still have comma here, but now it separates two variable assignment-on-declarations. And that's how the compiler attempts to treat that line from your example - but fails to get any meaning from
b * 5
line (it's neither assignment nor declaration).Now,
int a = (b + 2, b * 5)
is different: you assign a value ofb + 2, b * 5
expression to a variablea
of typeint
. The first sub-expression is discarded, leaving you just withb * 5
.