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 PRO 编译器在编译时不知道 $e 的结果 |
3 DsuineGP 2022-09-02 09:57:42 +08:00 我记得模版宏是无法做编译器计算的,只是简单的根据模式匹配的结果生成代码 要做编译器计算需要用过程宏 |
![]() | 4 whoami9894 2022-09-02 10:37:59 +08:00 大多数语言的宏都是正则序,先展开,后求值 |
![]() | 5 lasuar OP |