在C中是否有办法使用宏从字符文字创建字符串文字?
比如我有
'a'
我想创建字符串文字
"a"
澄清问题:
#define A 'a' write(fd,"x=" CHAR2STRING(A) "\n",4);
我的问题是如何定义宏CHAR2STRING
解决方法
– 对问题的评论摘要 –
这似乎无法实现.作为替代方案,可以定义字符串文字并改为编写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数组长度,案例标签或位域尽管编译器应该能够在编译时对其进行评估(使用Gcc和Clang测试).
建议于M Oehm和Matt McNabb.