这是什么样的宏?

Ant*_*t's 16 c c++

我遇到了以下代码:

#include<stdio.h>
#define d(x) x(#x[3])
int main(){
d(putchar);
}
Run Code Online (Sandbox Code Playgroud)

哪个打印c输出.我想知道宏有什么#define d(x) x(#x[3])作用?在C语言中有运营商#吗?我可以在宏体内看到这个,即这里x(#x[3]).根据我的正常眼睛,它看起来与我在C语言中看到的不同,但实际上这是做什么的?

编辑:#在现实世界中真正使用的是什么?

我是C的新手,如果解释简单,那将会很好.提前致谢.

Lau*_*all 24

字符'#'是字符串化器 - 它将符号转换为字符串.代码变成了

的putchar( "的putchar"[3]);

  • C基本字符串是char数组,"putchar"是一个数组,其中item [0] ='p',item [1] ='u',item [2] ='t',item [3] ='c',等......这就是为什么"putchar"[3]是'c' (2认同)