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 "\""

我建议不要以这种方式使用宏,但你问了这个问题。