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
rust中条件编译中的Else情况_Rust - Fatal编程技术网

rust中条件编译中的Else情况

rust中条件编译中的Else情况,rust,Rust,我怎样才能在没有cfg块匹配的情况下编译一些代码?例如,类似这样的事情: #IF NUM == 1 //something #ELSE IF NUM == 2 // something #ELSE // no case match, panic! #ENDIF 用手 #[cfg(thing1)] //某物 #[cfg(全部(非(第1项)、第2项))] //某物 #[cfg(全部(非(第1项)、非(第2项))] //没有案例 或者,在一个函数中,如果您的“某物”在任何情况下都是可编译的,那么您

我怎样才能在没有cfg块匹配的情况下编译一些代码?例如,类似这样的事情:

#IF NUM == 1
//something
#ELSE IF NUM == 2
// something
#ELSE
// no case match, panic!
#ENDIF
用手

#[cfg(thing1)]
//某物
#[cfg(全部(非(第1项)、第2项))]
//某物
#[cfg(全部(非(第1项)、非(第2项))]
//没有案例
或者,在一个函数中,如果您的“某物”在任何情况下都是可编译的,那么您可以使用
cfg。因为它的计算结果是一个文字,所以乐观主义者很有可能会去掉不匹配的位:

if-cfg!(事情1){
//某物
}否则,如果cfg!(事情2){
//某物
}否则{
恐慌!();
}
虽然这比恐慌更有意义

还有一些更符合人体工程学的东西


有关此主题的更多信息,请参阅文章,其中对各种方法进行了扩展和讨论。

您可以在
cfg
块的条件部分使用
not
。您可以在文档中看到有关的示例

如果需要更复杂的内容,也可以使用
any
all
,例如:

#[cfg(target_os="linux")]
fn get_os() -> &str { return "Linux"; }

#[cfg(target_os="windows")]
fn get_os() -> &str { return "Windows"; }

#[cfg(not(any(target_os="linux", target_os="windows")))]
fn get_os() -> &str { return "Unknown"; }

更多详细信息请参见。

cfg在编译时计算值,但您需要在运行时检查这些值,例如,您不能通过使用
if cfg!(…else
“例如,您无法区分windows特定代码和linux特定代码”,这取决于具体执行的操作,这仅限于可以在每个分支中编译的代码,但在某些情况下,它可以正常工作,例如,不同的嵌入式程序集。
#[cfg(target_os="linux")]
fn get_os() -> &str { return "Linux"; }

#[cfg(target_os="windows")]
fn get_os() -> &str { return "Windows"; }

#[cfg(not(any(target_os="linux", target_os="windows")))]
fn get_os() -> &str { return "Unknown"; }