编译器在此语句中给出错误.
i>=3?b=10:b=5;
error: lvalue required as left operand of assignment
Run Code Online (Sandbox Code Playgroud)
无法弄清楚原因.正在使用的编译器是GCC.
运算符优先级解释了该问题.按照C语法你的
i >= 3 ? b = 10 : b = 5;
Run Code Online (Sandbox Code Playgroud)
由C编译器解释为
(i >= 3 ? b = 10 : b) = 5;
Run Code Online (Sandbox Code Playgroud)
首先,这可能不是你想要的.其次,在C语言中,?:运算符的结果不是左值.你不能给它分配任何东西.因此错误消息.
为了纠正问题(假设我理解你的意图正确),你必须使用大括号
i >= 3 ? (b = 10) : (b = 5);
Run Code Online (Sandbox Code Playgroud)
或者只是以更传统的方式重写它
b = i >= 3 ? 10 : 5;
Run Code Online (Sandbox Code Playgroud)
作为旁注,这恰好是C和C++语法之间的差异之一.在C++中,i >= 3 ? (b = 10) : (b = 5)即使没有明确的括号,您的原始语句也会被解释为.最重要的是,在C++中,结果?:可以是左值.
换句话说,在C++中,您的原始语句将"按预期"编译和工作,但不在C中.
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |