【问题标题】:Splitting arguments in C++ preprocessor在 C++ 预处理器中拆分参数
【发布时间】: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 定义的情况下是否有解决此问题的方法?

【问题讨论】:

标签: c++ macros c-preprocessor


【解决方案1】:

有点。以下作品:

#define MAC_POINT(x,y) (x+y)
#define MAC_POINT1(xy) MAC_POINT(xy)
#define XY x,y
MAC_POINT(x,y)
MAC_POINT1(XY)

但是,如果您只有一个参数,则必须从 MAC_POINT 更改为 MAC_POINT1。

另一种可能性是这样的:

#define MAC_POINT(x,y) (x+y)
#define MAC_POINT1(xy) MAC_POINT xy
#define XY x,y
MAC_POINT1((x,y))
MAC_POINT1((XY))

现在您必须更改对宏的所有调用,但至少它们是一致的。

【讨论】:

  • 啊,我想我明白为什么需要额外的间接级别了。谢谢!
猜你喜欢
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 2013-12-05
  • 2011-01-08
  • 1970-01-01
  • 2017-02-25
  • 2011-10-04
相关资源
最近更新 更多