此代码正确执行
#include<stdio.h>
#define JOIN(s1, s2) printf("%s=%s %s=%s \n", #s1, s1, #s2, s2);
int main()
{
char *str1="India";
char *str2="BIX";
JOIN(str1, str2);
return 0;
}
但此代码不会执行
#include<stdio.h>
int main()
{
char *str1="India";
char *str2="BIX";
printf("%s=%s %s=%s \n", #str1, str1, #str2, str2);
return 0;
}
我刚刚替换了第一个段编码的宏,但它没有工作
答案 0 :(得分:8)
使用#var
功能导致"var"
是预处理器的一部分,因此您只能将其用作宏的一部分。
如果你想继续使用它,人们通常会写一个名为STRINGIFY的宏:
#define STRINGIFY(x) #x
在你的情况下,最好的办法可能就是自己做引用。
char *str1="India";
char *str2="BIX";
printf("%s=%s %s=%s \n", "str1", str1, "str2", str2);
答案 1 :(得分:2)
这是预处理器语法,只能在宏定义(#define..
)中使用。
您的代码首先通过CPP(C预处理器)运行,它负责所有#xxx..
语法。然后将结果传递给C编译器,C编译器对#xxxx..
语法一无所知。
您可以自己尝试 - 而不是 gcc ,在您的文件上运行 cpp ,您可以看到宏扩展的结果。
答案 2 :(得分:1)
删除#只适用于宏
试试这个
int main()
{
char *str1="India";
char *str2="BIX";
printf("str1=%s str2=%s \n", str1, str2);
return 0;
}