はじめに
この実験では、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 でさらに多くの実験を練習できます。