奇怪的宏扩展
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 ()
我最近遇到了这个宏:
#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 ()