2014-03-29 45 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的正文結束爲括號可以解決問題。

相關問題