2

可能重复:
宏值的字符串化

我想编写一个 C 宏,它采用“字符序列”(例如,#define macro(sequence))并返回带引号的字符串"sequence",所以宏应该创建"\"sequence\"". 我知道我可以做到#sequence,但这只是返回"sequence",这不是我想要的......我必须说这"sequence"是另一个宏,所以我不能像在这个宏中那样写它,因为它被“非字面意思”替换. 有任何想法吗?

4

3 回答 3

3
#include <stdio.h>

#define QUOTE(seq) "\""#seq"\""

int main(void)
{
    printf("%s\n", QUOTE(sequence));
    return 0;
}
于 2012-12-06T10:11:54.257 回答
2

使用#sequence但在前后添加引号:

#define macro(sequence) "\"" #sequence "\""

字符串文字将被连接起来,为您提供所需的结果。

例如:

#define hello abc
printf("%s\n", macro(hello));

将打印"hello"(包括引号)。

于 2012-12-06T09:59:18.020 回答
1

您需要一个宏来扩展参数,另一个来添加引号。调用后一个宏两次以在引号周围添加引号。在这种情况下会自动处理转义。

#define stringify_literal( x ) # x
#define stringify_expanded( x ) stringify_literal( x )
#define stringify_with_quotes( x ) stringify_expanded( stringify_expanded( x ) )
于 2012-12-06T10:07:42.880 回答