макрос: #define a (b) ({... c;}) означает, что a (b) возвращает c? - PullRequest
1 голос
/ 30 сентября 2011

У меня есть этот код в ядре 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 Ответ

4 голосов
/ 30 сентября 2011

Правильно.Он вернет ___val.Однако блочные выражения, подобные этим, являются расширением GNU и фактически не являются частью стандарта C.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...