看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
bibo9901: 這是gnu c extension. 把 __v 當作 {} 的回傳值 07/11 21:15
loach98: 感激兩位大大!! 07/11 21:51