【发布时间】:2012-04-12 07:44:59
【问题描述】:
我想连接字符串文字和字符文字。由于语法不正确,"abc" 'd' "efg" 会导致编译器错误:
x.c:4:24: 错误:预期为 ',' 或 ';'在'd'之前
现在我必须使用 snprift(不必要地),尽管在编译时知道字符串文字和字符文字的值。
我试过了
#define CONCAT(S,C) ({ \
static const char *_r = { (S), (C) }; \
_r; \
})
但它不起作用,因为 S 的空终止符没有被剥离。 (除了给出编译器警告。)
有没有办法写一个宏来使用
-
"abc" MACRO('d') "efg"或 -
MACRO1(MACRO2("abc", 'd'), "efg")或 -
MACRO("abc", 'd', "efg")?
如果有人问我为什么要这样:char 文字来自库,我需要将字符串作为状态消息打印出来。
【问题讨论】:
-
我不想想要使用 sprintf 或任何运行时函数。请不要提出任何使用运行时方法调用的答案。
-
如果文字来自库,您如何访问它?是库头文件提供的宏吗?
-
是的,它来自一个头文件。
标签: c string macros char concatenation