宏:#define a(b)({... c;})是否意味着a(b)返回c?

时间:2011-09-30 01:01:24

标签: c linux-kernel

我在linux内核中有这个代码:

#define task_cred_xxx(task, xxx)                        
({                                                      
    __typeof__(((struct cred *)NULL)->xxx) ___val;  
    rcu_read_lock();                               
    ___val = __task_cred((task))->xxx;              
    rcu_read_unlock();                              
    ___val;                                         
})

我之前从未见过如此定义的宏,这是否意味着这是task_cred_xxx(task,xxx)返回___ val?

谢谢!

1 个答案:

答案 0 :(得分:4)

正确。它将返回___val。但是,像这样的块表达式是GNU扩展,实际上并不是C标准的一部分。

http://www.toofishes.net/blog/gcc-compound-statement-expressions/