cfg
構成に基づく条件チェックは、2 種類の異なる演算子を通じて行えます。
cfg属性: 属性の位置での#[cfg(...)]cfg!マクロ: 真偽値式でのcfg!(...)
前者は条件付きコンパイルを可能にする一方、後者は条件に応じて true または false リテラルに評価され、実行時のチェックを可能にします。どちらも 同一の引数構文を利用します。
cfg! は #[cfg] とは異なり、コードを一切削除せず、true または false に評価されるだけです。たとえば、cfg! が条件に使用されている場合、cfg! が何に評価されるかに関係なく、if/else 式内のすべてのブロックが有効である必要があります。
// この関数は、ターゲット OS が linux の場合にのみコンパイルされます #[cfg(target_os = "linux")] fn are_you_on_linux() { println!("linux で実行しています!"); } // そして、この関数は、ターゲット OS が linux で*ない*場合にのみコンパイルされます #[cfg(not(target_os = "linux"))] fn are_you_on_linux() { println!("linux で実行して*いません*!"); } fn main() { are_you_on_linux(); println!("本当ですか?"); if cfg!(target_os = "linux") { println!("はい。間違いなく linux です!"); } else { println!("はい。間違いなく linux では*ありません*!"); } }