全部。
在浏览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/

10-16 09:49