日期:2014-05-16  浏览次数:20772 次

linux 的又一处宏定义问题
大家好,在 linux 代码中有如下一处定义:
#define ptep_clear_flush_young(__vma, __address, __ptep) \
({ \
int __young; \
__young = ptep_test_and_clear_young(__vma, __address, __ptep); \
if (__young) \
flush_tlb_page(__vma, __address); \
__young; //不解,这里这样写起什么作用??? \
})
如上所示,不理解那里的写法是干什么用的。__young不是变量吗,怎么能直接写到这呢?而且发现 Pgtable.h 代码中有很多类似这样的写法,不解。哪位知道能指点一下,谢谢!

------解决方案--------------------
貌似返回值
------解决方案--------------------
应该就是返回值了。宏定义了一个表达式,表达式的最后一个值就是返回值了。
------解决方案--------------------
就是一个返回值,整个宏定义的返回结构,
ptep_test_and_clear_young(__vma, __address, __ptep); 的返回值。

是真的话
在执行这个
flush_tlb_page(__vma, __address);
最后将结果返回回去
------解决方案--------------------
C/C++ code

zengming@linux-008:~/test/test> cat main.cpp
#include<iostream>
using namespace std;

int main()
{
    cout << ({int a; a = 100; a;}) << endl;
    return 0;
}
zengming@linux-008:~/test/test> g++ main.cpp 
zengming@linux-008:~/test/test> ./a.out 
100