2

如果以下代码有效

i=1;
i<10 ? printf("Hello") : printf("Bye");

那么分配也应该起作用。导致它产生错误的原因是什么?

i<10 ? foo=10 : foo=12;
4

2 回答 2

6

导致它产生错误的原因是什么?

运算符优先级。

i<10 ? foo=10 : foo=12;相当于(i<10 ? foo=10 : foo) = 12;

使用括号来解决您的问题:

i<10 ? (foo=10) : (foo=12);
于 2013-09-15T10:50:31.413 回答
3

原因是运算符优先级。以下将起作用:

i<10 ? (foo=10) : (foo=12);

您的原始表达式被解析为

(i<10 ? foo=10 : foo)=12;

导致错误(lvalue required as left operand of assignment)。

于 2013-09-15T10:51:03.053 回答