在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;
}