错误:表达式不可分配三元运算符 [英] error: expression is not assignable ternary operator

查看:44
本文介绍了错误:表达式不可分配三元运算符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下代码,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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆