这是什么样的宏?

时间:2011-09-28 15:36:54

标签: c++ c

我遇到了以下代码:

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

其中输出c作为输出。我想知道宏#define d(x) x(#x[3])做了什么?在C语言中是否有像#这样的运算符?我可以在宏观体内看到这一点,即x(#x[3])。根据我的正常眼睛,它看起来与我在C语言中看到的不同,但实际上这是做什么的?

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

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

4 个答案:

答案 0 :(得分:24)

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

的putchar( “的putchar”[3]);

答案 1 :(得分:2)

哈希符号表示“stringify”,因此d(x)扩展为putchar("putchar"[3])c

答案 2 :(得分:2)

来自here

函数宏定义在替换序列中接受两个特殊运算符(#和##): 如果在替换序列中使用参数之前使用了运算符#,那么该参数将被字符串文字替换(就好像它被括在双引号之间)

#define str(x) #x
cout << str(test);

简单地说,它将“x”参数更改为字符串。在这种情况下,测试变成一个包含't','e','s','t','\ 0'的字符数组。

答案 3 :(得分:2)

#是一个预处理器运算符,它将文字转换为字符串。实际上,您的d宏会打印您文字的转换字符串的第四个char