我想写一个C宏,它带有一个"字符序列" (例如,#define macro(sequence)
)并返回引用的字符串"sequence"
,因此宏应创建"\"sequence\""
。我知道我可以#sequence
但这只会返回"sequence"
这不是我正在寻找的......我必须说"sequence"
是另一个宏,所以我可以&# 39;在这个宏中写出来,因为它得到了"非字面上"更换。有什么想法吗?
答案 0 :(得分:2)
使用#sequence
,但在之前和之后添加引号:
#define macro(sequence) "\"" #sequence "\""
将连接字符串文字,为您提供所需的结果。
例如:
#define hello abc
printf("%s\n", macro(hello));
将打印"hello"
(包括引号)。
答案 1 :(得分:2)
#include <stdio.h>
#define QUOTE(seq) "\""#seq"\""
int main(void)
{
printf("%s\n", QUOTE(sequence));
return 0;
}
答案 2 :(得分:0)
您需要一个宏来扩展参数,另一个宏来添加引号。将后一个宏调用两次以在引号周围添加引号。在这种情况下,会自动处理转义。
#define stringify_literal( x ) # x
#define stringify_expanded( x ) stringify_literal( x )
#define stringify_with_quotes( x ) stringify_expanded( stringify_expanded( x ) )