我最近遇到过这个宏:
#define EAT(...)
#define STRIP(x) EAT x
STRIP( (1) 2 ) \\ expands to 2
现在有人可以解释一下发生了什么吗?
这个EAT x如何扩展?
括号'(1)'做什么?
为什么我不能像STRIP(1(2))那样反向?
我最初的意图是在像SPLIT(1 2)这样的宏中将一个参数拆分为1,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 ()