编译器对此语句给出错误。
i>=3?b=10:b=5;
error: lvalue required as left operand of assignment
无法弄清楚为什么。正在使用的编译器是 GCC。
编译器对此语句给出错误。
i>=3?b=10:b=5;
error: lvalue required as left operand of assignment
无法弄清楚为什么。正在使用的编译器是 GCC。
该问题由运算符优先级解释。按照你的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++ 语法之间的差异之一。i >= 3 ? (b = 10) : (b = 5)
在 C++ 中,即使没有显式大括号,您的原始语句也会被解释为。最重要的是,在 C++ 中,结果?:
可以是左值。
换句话说,在 C++ 中,您的原始语句将“按预期”编译和工作,但在 C 中不会。
尝试更多类似的东西:
b = (i >= 3) ? 10 : 5;
您应该在?:
运算符的两个执行路径中有表达式,而不是语句。