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

C中是否有一种方法可以使用宏从字符文字创建字符串文字?

比如我有

'a' 

我想创建字符串文字

 "a" 

澄清问题:

 #define A 'a' write(fd, "x=" CHAR2STRING(A) "\n", 4); 

我的问题是如何定义宏CHAR2STRING

– 对问题的评论摘要 –

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

 #define A "a" #define STRING2CHAR(s) (*(s)) write(fd, "x=" A "\n", 4); putchar(STRING2CHAR(A)); 

要么

 #define A a #define XSTR(s) #s #define SYM2CHAR(sym) (*XSTR(sym)) #define SYM2STRING(sym) XSTR(sym) 

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


M Oehm和Matt McNabb建议。

不是很优雅,但它有效:

 #define STRING_ME(tgt, ch) tgt[0]=ch;tgt[1]='\0' 

假设tgt有2个字符的空间。 也许您可以举例说明您想要的样子?

你可以做到

 #define A 'a' #define X(macro) #macro #define CHAR2STRING(macro) X(macro) printf("%s\n", CHAR2STRING(A)); 

你会得到’a’而不是a,但也许那对你好。