展开引用字符串中的宏

时间:2012-10-18 16:05:21

标签: c macros c-preprocessor c-strings

  

可能重复:
  C Macros to create strings

我有一个接受char*类型参数的函数,如f("string");
如果字符串参数是在函数调用中由the-fly定义的,那么如何在字符串体内扩展宏?

例如:

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

等同于

f("abc #00ff00");

但是不执行扩展,函数按字面意思abc COLOR

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

2 个答案:

答案 0 :(得分:35)

您无法在字符串中展开宏,但可以编写

#define COLOR "#00ff00"

f("abc "COLOR);

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

答案 1 :(得分:4)

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