全部。
在浏览Linux内核源代码时,我发现了以下代码片段:
per_cpu(zcache_dstmem, cpu) = NULL;
如果我查找每个cpu的定义,如下所示:
#define VERIFY_PERCPU_PTR(__p) ({ \
__verify_pcpu_ptr((__p)); \
(typeof(*(__p)) __kernel __force *)(__p); \
})
#define per_cpu(var, cpu) (*((void)(cpu), VERIFY_PERCPU_PTR(&(var))))
如果我解析预处理器,它将变成:
*((void)(cpu), { __verify_pcpu_ptr(&zcache_dstmem); (typeof(zcache_dstmem) __kernel _-force *)(__p); }) = NULL
我有一种强烈的感觉,那就是我把它分析错了,我不知道该如何理解这个片段。
有什么帮助吗?
最佳答案
错过了一个替换。
*((void)(cpu), { __verify_pcpu_ptr(&zcache_dstmem); (typeof(zcache_dstmem) __kernel __force *)(&zcache_dstmem); }) = NULL
这是逗号操作中statement expression的一个示例。块的结果是最后一个表达式。我不知道它对
(void)(cpu)
部分做了什么,但是&zcache_dstmem
看起来好像被设置为空了?祝你能更进一步地解开这个谜团!关于c - C表示L值的奇怪语法(在Linux内核中:per_cpu),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15538514/