rust中条件编译中的Else情况
我怎样才能在没有cfg块匹配的情况下编译一些代码?例如,类似这样的事情: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项))] //没有案例 或者,在一个函数中,如果您的“某物”在任何情况下都是可编译的,那么您
#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"; }