C 中宏的使用
Use of macros in C
我正在尝试将输出生成为双引号输入。例如,如果在 str() 中传递的参数是一些 name 那么输出应该是 "name" 这在下面的代码。
#include<stdio.h>
#include<string.h>
#define str(s) #s
#define newline printf("\n")
int main()
{
printf("Your double quoted code is : %s ",str(GHOST));
newline;
}
Output : GHOST
您应该将格式编辑为 \"%s\"
发生的事情是添加了引号 ,但它们作为语言语法的一部分被使用了。因为,你需要传递一个 string 像 "GHOST"
到 printf
,而不仅仅是一个标识符。
如果您希望在 运行 程序时出现引号,我会做到
printf("Your double quoted code is : \"%s\" ",str(GHOST));
相反。格式字符串中的转义引号将出现在输出中。
这应该可以解决问题。
printf("Your double quoted code is : \"%s\"",str(GHOST));
您可以将 stringify 运算符应用于字符串:
#define xstr(x) #x
#define str(x) xstr(x)
#define quote(x) str(str(x))
int main() {
printf("Your double quoted code is : %s ",quote(GHOST));
putchar('\n');
return 0;
}
但是,使用 xstr
将参数重新扫描到 str
的副作用——这是扩展内部 str(GHOST)
所必需的,如果 GHOST
本身是一个宏定义,它会被扩展,不像问题中代码片段中的GHOST
。
如果您想要在输出中使用双引号字符,请将您的格式字符串更改为
printf("Your double quoted code is : \"%s\" ",str(GHOST));
或将您的宏更改为
#define str(s) "\"" #s "\""
我建议不要以这种方式使用宏,但你问了这个问题。
我正在尝试将输出生成为双引号输入。例如,如果在 str() 中传递的参数是一些 name 那么输出应该是 "name" 这在下面的代码。
#include<stdio.h>
#include<string.h>
#define str(s) #s
#define newline printf("\n")
int main()
{
printf("Your double quoted code is : %s ",str(GHOST));
newline;
}
Output : GHOST
您应该将格式编辑为 \"%s\"
发生的事情是添加了引号 ,但它们作为语言语法的一部分被使用了。因为,你需要传递一个 string 像 "GHOST"
到 printf
,而不仅仅是一个标识符。
如果您希望在 运行 程序时出现引号,我会做到
printf("Your double quoted code is : \"%s\" ",str(GHOST));
相反。格式字符串中的转义引号将出现在输出中。
这应该可以解决问题。
printf("Your double quoted code is : \"%s\"",str(GHOST));
您可以将 stringify 运算符应用于字符串:
#define xstr(x) #x
#define str(x) xstr(x)
#define quote(x) str(str(x))
int main() {
printf("Your double quoted code is : %s ",quote(GHOST));
putchar('\n');
return 0;
}
但是,使用 xstr
将参数重新扫描到 str
的副作用——这是扩展内部 str(GHOST)
所必需的,如果 GHOST
本身是一个宏定义,它会被扩展,不像问题中代码片段中的GHOST
。
如果您想要在输出中使用双引号字符,请将您的格式字符串更改为
printf("Your double quoted code is : \"%s\" ",str(GHOST));
或将您的宏更改为
#define str(s) "\"" #s "\""
我建议不要以这种方式使用宏,但你问了这个问题。