Rust の cfg 属性を使った条件付きコンパイル

RustRustBeginner
オンラインで実践に進む

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Rust の cfg 属性と cfg! マクロについて学びます。これらはそれぞれ、構成と評価における条件付きチェックを可能にします。cfg 属性は条件付きコンパイルを可能にし、cfg! マクロは実行時に真または偽に評価されます。#[cfg] のようにコードを削除できるものとは異なり、cfg! を使用したコード ブロックは評価結果に関係なく有効でなければなりません。

注: 実験でファイル名が指定されていない場合、好きなファイル名を使用できます。たとえば、main.rs を使用して、rustc main.rs &&./main でコンパイルして実行できます。

cfg

構成条件付きチェックは、2 つの異なる演算子を通じて可能です。

  • cfg 属性:属性位置に #[cfg(...)]
  • cfg! マクロ:ブール式に cfg!(...)

前者は条件付きコンパイルを可能にする一方、後者は実行時のチェックを可能にするために、条件付きで true または false のリテラルに評価されます。両方とも同じ引数構文を使用します。

cfg!#[cfg] とは異なり、コードを削除せず、真偽値のみを評価します。たとえば、条件に cfg! を使用する場合、if/else 式のすべてのブロックは、cfg! が評価する内容に関係なく、有効でなければなりません。

// この関数は、対象の OS が linux の場合のみコンパイルされます
#[cfg(target_os = "linux")]
fn are_you_on_linux() {
    println!("You are running linux!");
}

// この関数は、対象の OS が linux でない場合のみコンパイルされます
#[cfg(not(target_os = "linux"))]
fn are_you_on_linux() {
    println!("You are *not* running linux!");
}

fn main() {
    are_you_on_linux();

    println!("Are you sure?");
    if cfg!(target_os = "linux") {
        println!("Yes. It's definitely linux!");
    } else {
        println!("Yes. It's definitely *not* linux!");
    }
}

まとめ

おめでとうございます!あなたは Cfg 実験を完了しました。あなたの技術を向上させるために、LabEx でさらに多くの実験を練習できます。