printf语句中的#符号不起作用

时间:2014-07-29 12:48:32

标签: c

此代码正确执行

#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;
}

我刚刚替换了第一个段编码的宏,但它没有工作

3 个答案:

答案 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;
   }