【发布时间】:2012-12-12 16:27:12
【问题描述】:
我正在处理的一些遗留代码有一个宏,它返回一个以逗号分隔的列表,旨在用作函数参数。这很难看,但配置文件包含许多这些,现在很难更改。
#define XY1 0,0
#define XY2 1,7
...
void fun_point(x,y);
fun_point(XY1);
只要它是一个被调用的函数,它就可以正常工作。但是,当尝试使用参数调用另一个宏时,整个字符串被视为一个参数,而不是在逗号处拆分为两个参数
#define MAC_POINT(x,y) (x+y)
MAC_POINT(XY1) #not expanded by preprocessor
在不更改 XY 定义的情况下是否有解决此问题的方法?
【问题讨论】:
-
/me 对遗留代码握拳
-
我在 GCC 手册中找到了讨论或这个问题:gcc.gnu.org/onlinedocs/cpp/…
标签: c++ macros c-preprocessor