可能重复:
宏值的字符串化
我想编写一个 C 宏,它采用“字符序列”(例如,#define macro(sequence)
)并返回带引号的字符串"sequence"
,所以宏应该创建"\"sequence\""
. 我知道我可以做到#sequence
,但这只是返回"sequence"
,这不是我想要的......我必须说这"sequence"
是另一个宏,所以我不能像在这个宏中那样写它,因为它被“非字面意思”替换. 有任何想法吗?
#include <stdio.h>
#define QUOTE(seq) "\""#seq"\""
int main(void)
{
printf("%s\n", QUOTE(sequence));
return 0;
}
使用#sequence
但在前后添加引号:
#define macro(sequence) "\"" #sequence "\""
字符串文字将被连接起来,为您提供所需的结果。
例如:
#define hello abc
printf("%s\n", macro(hello));
将打印"hello"
(包括引号)。
您需要一个宏来扩展参数,另一个来添加引号。调用后一个宏两次以在引号周围添加引号。在这种情况下会自动处理转义。
#define stringify_literal( x ) # x
#define stringify_expanded( x ) stringify_literal( x )
#define stringify_with_quotes( x ) stringify_expanded( stringify_expanded( x ) )