# 符号作为 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,它完全打印字符串。所以你不需要给出一对 "".