我遇到了以下代码:
#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的新手,如果解释简单,那将会很好。提前致谢。
答案 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
。