Using comma operator in c

不想你离开。 提交于 2019-12-19 22:50:11

问题


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);

And this generates error,I couldn't understand the reason.

int a =b+2,b*5;   // Error

回答1:


Because precedence of , operator is lower than of = one, this...

a=b+2,b*5;

... will actually be evaluated as...

a = b + 2;
b * 5;

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:

int a = 3, b = 4;

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 of b + 2, b * 5 expression to a variable a of type int. The first sub-expression is discarded, leaving you just with b * 5.



来源:https://stackoverflow.com/questions/18666095/using-comma-operator-in-c

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!