在带引号的字符串中展开宏[重复]

问题描述 投票:0回答:2

我有一个函数,它接受一个类型为

char*
的参数,例如
f("string");

如果字符串参数是在函数调用中即时定义的,那么宏如何在字符串体内展开?

例如:

#define COLOR #00ff00
f("abc COLOR");

相当于

f("abc #00ff00");

但是不执行扩展,并且该函数按字面意思接收

abc COLOR

特别是,我需要将宏精确扩展为

\"#00ff00\"
,以便这个带引号的标记与传递给
f()
的字符串参数的其余部分连接起来,包括引号;也就是说,预处理器必须完成他的工作并欢迎编译器将代码从
f("abc COLOR");
转换为
f("abc \"#00ff00\"");

c macros c-preprocessor c-strings
2个回答
57
投票

你不能在字符串中展开宏,但你可以写

#define COLOR "#00ff00"

f("abc "COLOR);

请记住,此连接是由 C 预处理器完成的,并且只是连接纯字符串而不是变量等的功能。


4
投票
#define COLOR "#00ff00"
f("abc "COLOR);
© www.soinside.com 2019 - 2024. All rights reserved.