Linux内核中的_THIS_IP_宏

mk_*_*mk_ 4 c linux-kernel

以下宏出现在 include/linux/kernel.h 中

#define _THIS_IP_  ({ __label__ __here; __here: (unsigned long)&&__here; })
Run Code Online (Sandbox Code Playgroud)

我不明白第二个 & 应用于 __here 会做什么。第一个获取本地标签的地址,但是第二个呢?

Joh*_*itb 5

第二个&in&&是让 GCC 将名称查找为标签而不是变量所必需的。例如

foo: ;
int foo;

void *p1 = &&foo;
void *p2 = &foo;
Run Code Online (Sandbox Code Playgroud)

第二个初始化器引用 int 变量。