我最近遇到了这个宏:

#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


它形成EAT(1)并被扩展



因为这会形成EAT 1 (2),因此您不能使用EAT

关于c++ - 奇怪的宏扩展,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29018495/

10-11 16:10