我在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?
谢谢!
答案 0 :(得分:4)
正确。它将返回___val
。但是,像这样的块表达式是GNU扩展,实际上并不是C标准的一部分。
http://www.toofishes.net/blog/gcc-compound-statement-expressions/