macro_rules! xxx{
($e:expr) => {
if $e > 0 {
xxx!( $e-1 );
};
};
}
xxx!(1);
这个代码为什么死递归?通过 trace_macro 发现 $e > 0 在编译器没有真正执行,而不是不断的拼接为
if 1 - 1 - 1 - 1 - 1 - ...
1
wineway 2022-09-02 06:41:40 +08:00 via iPhone
没写过,盲猜模式匹配出两个分支
|
2
SingeeKing 2022-09-02 08:59:41 +08:00 via iPhone
编译器在编译时不知道 $e 的结果
|
3
DsuineGP 2022-09-02 09:57:42 +08:00
我记得模版宏是无法做编译器计算的,只是简单的根据模式匹配的结果生成代码
要做编译器计算需要用过程宏 |
4
whoami9894 2022-09-02 10:37:59 +08:00
大多数语言的宏都是正则序,先展开,后求值
|
5
lasuar OP |