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

时间:2014-10-01 11:35:30

标签: c c-preprocessor

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

例如我有

'a'

我想创建字符串文字

"a"

澄清问题:

#define A 'a'

write(fd, "x=" CHAR2STRING(A) "\n", 4);

我的问题是如何定义宏CHAR2STRING

3 个答案:

答案 0 :(得分:2)

- 对问题的评论摘要 -

这似乎无法实现。作为替代方案,可以定义字符串文字,而是编写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数组长度,{{1尽管编译器应该能够在编译时对其进行评估(使用Gcc和Clang进行测试)。

}标签或位域宽度

建议M OehmMatt McNabb

答案 1 :(得分:0)

不是很优雅,但它有效:

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

假设tgt有2个字符的空间。也许您可以举例说明您希望它看起来像什么?

答案 2 :(得分:0)

你可以做到

#define A 'a'
#define X(macro) #macro
#define CHAR2STRING(macro) X(macro)

printf("%s\n", CHAR2STRING(A));

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