lvalue требуется слева

При компиляции этого кода:

#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)
                             ^

person Ahmed Mohamed    schedule 29.09.2019    source источник


Ответы (1)


Эта строка, например,

CLR_BIT(DIO_PIN_A,PIN_Bit);

расширяется до:

DIO_PIN_A &= ~(1<<PIN_Bit);

Однако DIO_PIN_A является целочисленной константой (мы знаем это, потому что она используется в case), поэтому ее нельзя изменить.

person Yakov Galka    schedule 29.09.2019