奇怪的宏观扩张

时间:2015-03-12 19:21:04

标签: c++ c-preprocessor

我最近遇到过这个宏:

#define EAT(...)
#define STRIP(x) EAT x
STRIP( (1) 2 ) \\ expands to 2

现在有人可以解释一下发生了什么吗?

这个EAT x如何扩展?

括号'(1)'做什么?

为什么我不能像STRIP(1(2))那样反向?

我最初的意图是在像SPLIT(1 2)这样的宏中将一个参数拆分为1,2以便有一种方式?

2 个答案:

答案 0 :(得分:4)

EAT是一个类似函数的宏,这意味着它必须像EAT(something)一样使用,并且它会扩展为空。

所以STRIP((1) 2)扩展为EAT (1) 2,扩展为2

  

括号'(1)'做什么?

它形成了EAT(1),它会被扩展

  

为什么我不能像STRIP(1(2))那样反向?

因为它形成了EAT 1 (2)而您无法使用EAT

答案 1 :(得分:3)

让我们逐步完成替换:

STRIP( (1) 2 )
EAT (1) 2
2

对于第二个例子:

STRIP( 1 (2) )
EAT 1 (2)     
//error, EAT is a macro so it needs ()