从其他语言移植代码时,我想将likely
/ unlikely
宏等一些表达式保留为虚拟宏。
使用示例:
if expr_nop!(expression) {
code;
}
... 与完全相同与写作相同:
if (expression) {
code;
}
什么是生锈中可以用作无操作的良好故障安全宏?
目前我有:
macro_rules! expr_nop { ($body:expr) => { $body } }
这是正确的还是应该以不同的方式写出来?
答案 0 :(得分:2)
我说你的宏......
macro_rules! expr_nop { ($body:expr) => { $body } }
......是对的。
它做了一件事:它检查宏的参数实际上是一个表达式。所以例如expr_nop(i32)
会产生编译时错误,因为i32是一个类型而不是表达式(这通常是一件好事,因为否则if expr_nop!(i32) {...}
会产生编译时错误,并且该错误可能是更复杂)。
错误在两种情况下都是编译时,但是在宏扩展之前的第一种情况和宏扩展之后的第二种情况下,这通常会使错误链接到你的代码更加困难试图编译。