Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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 では*ありません*!");
    }
}

関連項目:

リファレンスcfg!、およびマクロ