# 符号作为 strcmp() 参数的含义
Meaning of # symbol as argument in strcmp()
我在遗留代码中遇到了这行代码:
#define func(x,y) if(strcmp(x,#y)==0)
有人知道 y
前面的 #
符号的用途吗?
如评论中所述,这似乎是 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;
}
字符串化运算符实际上在编译阶段
之前将y
变量粘贴为字符串
首先,您发布的代码有误或完整。 #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,它完全打印字符串。所以你不需要给出一对 ""
.
我在遗留代码中遇到了这行代码:
#define func(x,y) if(strcmp(x,#y)==0)
有人知道 y
前面的 #
符号的用途吗?
如评论中所述,这似乎是 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;
}
字符串化运算符实际上在编译阶段
之前将y
变量粘贴为字符串
首先,您发布的代码有误或完整。 #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,它完全打印字符串。所以你不需要给出一对 ""
.