#符号作为strcmp()中的参数的含义

时间:2015-02-20 03:42:05

标签: c++ c macros strcmp

我在遗留代码中遇到了这行代码:

#define func(x,y)  if(strcmp(x,#y)==0)

任何人都知道#之前y符号的用途?

2 个答案:

答案 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,它正好打印字符串。因此,您无需提供""对。