[英]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
括号'(1)'的作用是什么?
它形成了扩展的EAT(1)
为什么我不能像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 ()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.