Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macros 如何定义传递(标识或NOP)宏?_Macros_Rust - Fatal编程技术网

Macros 如何定义传递(标识或NOP)宏?

Macros 如何定义传递(标识或NOP)宏?,macros,rust,Macros,Rust,从另一种语言移植代码时,我希望保留一些表达式,例如可能/不可能宏作为伪宏 用法示例: if expr_nop!(expression) { code; } 。。。这应该与写作完全相同: if (expression) { code; } 在rust中,哪一个好的故障保护宏可以用作no op 目前我有: macro_rules! expr_nop { ($body:expr) => { $body } } 这是正确的还是应该以不同的方式编写?我认为您的宏 macro

从另一种语言移植代码时,我希望保留一些表达式,例如
可能
/
不可能
宏作为伪宏

用法示例:

if expr_nop!(expression) { 
    code;
}
。。。这应该与写作完全相同:

if (expression) { 
    code;
}
在rust中,哪一个好的故障保护宏可以用作no op

目前我有:

macro_rules! expr_nop { ($body:expr) => { $body } }
这是正确的还是应该以不同的方式编写?

我认为您的宏

macro_rules! expr_nop { ($body:expr) => { $body } }
。。。这是正确的

不过,它做了一件事:它检查宏的参数实际上是一个表达式。因此,例如,
expr\u nop(i32)
将给出编译时错误,因为i32是一种类型而不是表达式(这通常是一件好事,否则
if expr\u nop!(i32){…}
将给出编译时错误,而该错误可能更复杂)


在这两种情况下,错误都是在编译时发生的,但在第一种情况下是在宏扩展之前(在宏扩展期间),而在第二种情况下是在宏扩展之后,这通常使得将错误链接到您试图编译的代码变得更加困难。

通过与identity函数的类比,调用此“identity宏”不是更好吗
no op
在我看来,它代表什么都不做,而不是保持表达式不变。@deniss,你可能是对的,我是这个术语的新手。与你的原始版本相关:。