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