我在遗留代码中遇到了这行代码:
#define func(x,y) if(strcmp(x,#y)==0)
任何人都知道#
之前y
符号的用途?
答案 0 :(得分:3)
如评论中所述,这似乎是c宏中的stringification。
这是一个使用示例代码的小例子:
#define doif(x, y) \
if(strcmp(x,#y)==0) { \
printf("doing! %s\n",x); \
}\
else { \
printf("not doing!\n"); \
}
int main()
{
char x[] = "test";
doif (x, test);
doif (x, something);
return 0;
}
stringification运算符实际上在编译阶段之前将y
变量粘贴为字符串
答案 1 :(得分:1)
首先,您发布错误或完整代码。 #y
应与宏定义一起使用,而不是在使用宏时。
#define MAC(STR) #STR
int main(int argc, char* argv[])
{
printf(MAC(ME));//prints ME
printf(MAC("ME"));//prints "ME"
return 0;
}
这里我定义了MAC宏,它接受一个参数。我做了它的字符串化。
另见第二个printf,它正好打印字符串。因此,您无需提供""
对。