在C宏中返回引用的字符串

时间:2012-12-06 09:56:38

标签: c string macros quotes

  

可能重复:
  Stringification of a macro value

我想写一个C宏,它带有一个"字符序列" (例如,#define macro(sequence))并返回引用的字符串"sequence",因此宏应创建"\"sequence\""。我知道我可以#sequence但这只会返回"sequence"这不是我正在寻找的......我必须说"sequence"是另一个宏,所以我可以&# 39;在这个宏中写出来,因为它得到了"非字面上"更换。有什么想法吗?

3 个答案:

答案 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 ) )