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

Умовні перевірки конфігурації можливі через два різні оператори:

  • атрибут cfg: #[cfg(...)] у позиції атрибута
  • макрос cfg!: cfg!(...) у булевих виразах

Хоча перший вмикає умовну компіляцію, другий умовно обчислюється до літералів true або false, що дає змогу виконувати перевірки під час виконання. Обидва використовують однаковий синтаксис аргументів.

cfg!, на відміну від #[cfg], не видаляє жодного коду і лише обчислюється як true або false. Наприклад, усі блоки в if/else виразі мають бути дійсними, коли cfg! використовується для умови, незалежно від того, що обчислює cfg!.

// Ця функція компілюється лише якщо цільова ОС — linux
#[cfg(target_os = "linux")]
fn are_you_on_linux() {
    println!("You are running linux!");
}

// І ця функція компілюється лише якщо цільова ОС — *не* 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!");
    }
}

Дивіться також:

the reference, cfg!, and macros.