繁体   English   中英

奇怪的宏观扩张

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM