2014-03-29 61 views
1

我正在研究覆盆子pi.and在linux中编写Keypad的代码。 我已经定义一个宏错误:需要左值作为左操作数的分配linux lr

#define ALL_COL_HIGH ((GPIO_SET(COL1) | GOIO_SET(COL2) | GPIO_SET(COL3) | GPIO__SET(COL4))) 

每当我使用ALL_COL_HIGH收到错误:需要左值作为转让的左操作数,并设置函数定义是

#define GPIO_SET(g) *(gpio.addr + 7) |= (1<<(g)) 
+0

一对括号可能会解决问题。 – devnull

回答

3

的提醒:一个表达式的始终紧贴身体宏括入括号:

#define GPIO_SET(g) (*(gpio.addr + 7) |= (1<<(g))) 

使用您的原始宏,宏ALL_COL_HIGH已扩展到某些东西像:从那里可以看出,在分配((1<<(g)) | *(gpio.addr + 7)) |= ...的左侧有这不是1-值的表达式

(( *(gpio.addr + 7) |= ((1<<(g)) | *(gpio.addr + 7)) |= ((1<<(g)) | .... )) 

(( *(gpio.addr + 7) |= (1<<(g)) | *(gpio.addr + 7) |= (1<<(g)) | .... )) 

被解析为。

GPIO_SET的正文结束为括号可以解决问题。

相关问题