在C宏中返回带引号的字符串

在C宏中返回带引号的字符串,c,string,macros,quotes,C,String,Macros,Quotes,可能重复: 我想编写一个C宏,它接受一个“字符序列”(例如,#define macro(sequence))并返回带引号的字符串“sequence”,因此宏应该创建“\“sequence\”。我知道我可以做#sequence,但这只是返回“sequence”,这不是我要找的。。。我必须说,“sequence”是另一个宏,所以我不能像在这个宏中那样编写它,因为它被“非字面”替换了。有什么想法吗?使用#顺序,但在前后添加引号: #define macro(sequence) "\"" #seque

可能重复:

我想编写一个C宏,它接受一个“字符序列”(例如,
#define macro(sequence)
)并返回带引号的字符串
“sequence”
,因此宏应该创建
“\“sequence\”
。我知道我可以做
#sequence
,但这只是返回
“sequence”
,这不是我要找的。。。我必须说,
“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 ) )
#包括
#定义引号(seq)\\\\\\\\ seq
内部主(空)
{
printf(“%s\n”,引号(序列));
返回0;
}

我无法让它工作。。。我写了这个宏:#define disableMacro(M)(push#u macro(\#M“\))@user732274:我不知道
\u Pragma
是如何工作的,但是这种方法在
printf
:这已经是我连续第二天回答这个问题了,但这比找到一个副本更容易…我能在一行中做些什么吗?这将扩展作为参数传递的宏,根据OP上面的评论,这不是他想要的。如果你有
\define sequence abc
,你希望
宏(sequence)
给你
“sequence\”或者
“abc\”
#include <stdio.h>

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

int main(void)
{
    printf("%s\n", QUOTE(sequence));
    return 0;
}