编译器在此语句中给出错误。
i>=3?b=10:b=5;
error: lvalue required as left operand of assignment
无法弄清楚原因。正在使用的编译器是GCC。
答案 0 :(得分:8)
问题由运算符优先级解释。按照C语法你的
i >= 3 ? b = 10 : b = 5;
被C编译器解释为
(i >= 3 ? b = 10 : b) = 5;
首先,这可能不是你想要的。其次,在C语言中,?:
运算符的结果不是左值。你不能给它分配任何东西。因此错误信息。
为了纠正问题(假设我理解你的意图正确),你必须使用大括号
i >= 3 ? (b = 10) : (b = 5);
或者只是以更传统的方式重写它
b = i >= 3 ? 10 : 5;
作为旁注,这恰好是C和C ++语法之间的差异之一。在C ++中,即使没有明确的大括号,您的原始语句也会被解释为i >= 3 ? (b = 10) : (b = 5)
。最重要的是,在C ++中?:
的结果可以是左值。
换句话说,在C ++中,您的原始语句将“按预期”编译和工作,但不会在C中编译。
答案 1 :(得分:1)
尝试更多类似的内容:
b = (i >= 3) ? 10 : 5;
答案 2 :(得分:0)
你应该在?:
运算符的两个执行路径中使用表达式而不是语句。