奇怪的宏扩展

Strange Macro Expansion

我最近遇到了这个宏:

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

现在有人可以解释一下这是怎么回事吗?

这个 EAT x 是如何展开的?

括号'(1)' 的作用是什么?

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

我的初衷是在像 SPLIT(1 2) 这样的宏中拆分一个参数以扩展为 1,2 有办法吗?

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

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

What that parenthesis'(1)' do?

它形成 EAT(1) 并展开

Why I can´t do the reverse like STRIP( 1 (2) ) ?

因为它形成 EAT 1 (2) 而你不能像那样使用 EAT

让我们逐步完成替换:

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

第二个例子:

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