我最近遇到了这个宏:
#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/