[問題] readb/readw/readl/readq

看板C_and_CPP作者 (銀貨兩訖)時間8年前 (2016/07/11 21:12), 編輯推噓1(102)
留言3則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Linux 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) X 問題(Question): trace linux-3.18/arch/arm64/include/asm/io.h時候, 看到關於readl的描述: #define readl(c) ({ u32 __v = readl_relaxed(c); __iormb(); __v; }) 想請教這段語法的意思? (已知iormb是barrier, 可以略過) 看起來是先宣告__v, 讓它去接readl_relaxed(c)的return值, 接著卡一個barrier, 確保read的動作有完成, 但是不太懂為何最後還有一個"__v;", 想請教它的意思是? 附註real_relaxed(c)也用了類似的定義手法 #define readl_relaxed(c) ({ u32 __v = \ le32_to_cpu((__force __le32)__raw_readl(c)); __v; }) 補充說明(Supplement): 懇請大大賜教... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.124.166.19 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1468242743.A.CCB.html

07/11 21:15, , 1F
這是gnu c extension. 把 __v 當作 {} 的回傳值
07/11 21:15, 1F

07/11 21:51, , 3F
感激兩位大大!!
07/11 21:51, 3F
文章代碼(AID): #1NWvitpB (C_and_CPP)