错误:表达式不可分配三元运算符 [英] error: expression is not assignable ternary operator
问题描述
我有以下代码,MPLABX XC8 编译器给出了这个错误:
<块引用>错误:表达式不可赋值
U1ERRIRbits.RXFOIF ?uart1.oerr = 1 : uart1.oerr = 0;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^
这是相关的代码部分:
typedef union {结构{布尔值:1;//FERIF 帧错误布尔错误:1;//ABDOVF 错误布尔值:1;//RXFOIF 错误布尔准备好:1;//准备读取的数据uint8_t 保留:4;};uint8_t 状态;}uart1_status_t;静态易失 uart1_status_t uart1;
<块引用>
U1ERRIRbits.RXFOIF ?uart1.oerr = 1 : uart1.oerr = 0;
当我使用时,同样的事情不会出错
if (U1ERRIRbits.RXFOIF)uart1.oerr = 1;别的uart1.oerr = 0;
不明白为什么?
U1ERRIRbits.RXFOIF ?uart1.oerr = 1 : uart1.oerr = 0;
被解释为:
(U1ERRIRbits.RXFOIF ? uart1.oerr = 1 : uart1.oerr) = 0;
哪个尝试将 0
分配给 ...?如果你想使用这样的结构,你需要大括号:
U1ERRIRbits.RXFOIF ?uart1.oerr = 1 : (uart1.oerr = 0);
或者更好:
uart1.oerr = U1ERRIRbits.RXFOIF ?1:0;
或:
uart1.oerr = !!U1ERRIRbits.RXFOIF;
或:
uart1.oerr = (bool)U1ERRIRbits.RXFOIF;
或者真的只是:
uart1.oerr = U1ERRIRbits.RXFOIF;
as typeof(uart1.oerr) == bool
,值将被隐式转换为 1
非零值或 0
零值.
I have the following code and MPLABX XC8 compiler gives this error:
error: expression is not assignable
U1ERRIRbits.RXFOIF ? uart1.oerr = 1 : uart1.oerr = 0; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^
Here is the relevant code section:
typedef union {
struct {
bool ferr : 1; // FERIF Framing Error
bool aerr : 1; // ABDOVF Error
bool oerr : 1; // RXFOIF Error
bool ready : 1; // Data Ready to be read
uint8_t reserved : 4;
};
uint8_t status;
}uart1_status_t;
static volatile uart1_status_t uart1;
U1ERRIRbits.RXFOIF ? uart1.oerr = 1 : uart1.oerr = 0;
Same thing does not give error when I use
if (U1ERRIRbits.RXFOIF)
uart1.oerr = 1;
else
uart1.oerr = 0;
Do not understand why?
U1ERRIRbits.RXFOIF ? uart1.oerr = 1 : uart1.oerr = 0;
is interpreted as:
(U1ERRIRbits.RXFOIF ? uart1.oerr = 1 : uart1.oerr) = 0;
Which tries to assign 0
to ...? If you want to use such construct, you need braces:
U1ERRIRbits.RXFOIF ? uart1.oerr = 1 : (uart1.oerr = 0);
Or better:
uart1.oerr = U1ERRIRbits.RXFOIF ? 1 : 0;
or:
uart1.oerr = !!U1ERRIRbits.RXFOIF;
or:
uart1.oerr = (bool)U1ERRIRbits.RXFOIF;
or really just:
uart1.oerr = U1ERRIRbits.RXFOIF;
as typeof(uart1.oerr) == bool
, the value will be implicitly converted to 1
for nonzero values or 0
for zero.
这篇关于错误:表达式不可分配三元运算符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!