左值所需的左值

Posted

技术标签:

【中文标题】左值所需的左值【英文标题】:lvalue required as left 【发布时间】:2019-09-29 21:52:44 【问题描述】:

编译这段代码时:

#define SET_BIT(reg,bitno)          reg|=(1<<bitno)
#define CLR_BIT(reg,bitno)          reg &=~(1<<bitno)
#define GET_BIT(reg,bitno)          ((reg>>bitno)&1)
#define TOGGLE_BIT(reg,bitno)       reg^=(1<<bitno)

switch (PIN_select)

     case DIO_PIN_A:
        if (level==LOW)
            CLR_BIT(DIO_PIN_A,PIN_Bit);
        else if(level==HIGH)
            SET_BIT(DIO_PIN_A,PIN_Bit);
     break;

我收到以下错误:

 error: lvalue required as left operand of assignment fac(0)=1;
 error: lvalue required as left operand of assignmen
 error: lvalue required as left operand of assignment
 #define CLR_BIT(REG,BIT) REG &=~(1<<BIT)
                              ^
 note: in expansion of macro ‘CLR_BIT’
CLR_BIT(DIO_PIN_A,PIN_Bit);
    ^
 error: lvalue required as left operand of assignment
 #define SET_BIT(REG,BIT) REG|=(1<<BIT)
                             ^

【问题讨论】:

【参考方案1】:

例如这一行

CLR_BIT(DIO_PIN_A,PIN_Bit);

扩展到:

DIO_PIN_A &= ~(1<<PIN_Bit);

但是,DIO_PIN_A 是一个整型常数(我们知道这一点是因为它用在了 case 中),所以你不能修改它。

【讨论】:

以上是关于左值所需的左值的主要内容,如果未能解决你的问题,请参考以下文章

C++11:左值右值左值引用右值引用

C++11:左值右值左值引用右值引用

C++左值左值引用右值右值引用

C++11:左值右值左值引用右值引用有什么区别?

C++:神一样的左值

函数类型的左值是不是是可修改的左值?