为什么这个陈述会出错?

h4c*_*k3d 0 c

编译器在此语句中给出错误. i>=3?b=10:b=5;

error: lvalue required as left operand of assignment
Run Code Online (Sandbox Code Playgroud)

无法弄清楚原因.正在使用的编译器是GCC.

AnT*_*AnT 8

运算符优先级解释了该问题.按照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中.