macro:来自char literal的字符串文字

mar*_*nev 7 c c-preprocessor

在C中是否有办法使用宏从字符文字创建字符串文字?

比如我有

'a'
Run Code Online (Sandbox Code Playgroud)

我想创建字符串文字

"a"
Run Code Online (Sandbox Code Playgroud)

澄清问题:

#define A 'a'

write(fd, "x=" CHAR2STRING(A) "\n", 4);
Run Code Online (Sandbox Code Playgroud)

我的问题是如何定义宏CHAR2STRING

maf*_*fso 2

\xe2\x80\x93问题评论摘要\xe2\x80\x93

\n\n

这似乎是不可能实现的。作为替代方案,可以定义字符串文字并STRING2CHAR编写宏:

\n\n
#define A "a"\n#define STRING2CHAR(s) (*(s))\nwrite(fd, "x=" A "\\n", 4);\nputchar(STRING2CHAR(A));\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者

\n\n
#define A a\n#define XSTR(s) #s\n#define SYM2CHAR(sym) (*XSTR(sym))\n#define SYM2STRING(sym) XSTR(sym)\n
Run Code Online (Sandbox Code Playgroud)\n\n

该表达式*"a"不是编译时常量(因此,例如,它不能用作具有非自动存储持续时间、非 VLA 数组长度、标签case或位字段宽度的对象的初始值设定项),尽管编译器应该能够在编译时对其进行评估(使用 Gcc 和 Clang 进行测试)。

\n\n
\n\n

由M OehmMatt McNabb建议。

\n