cfg - Rust By Example
Description: Rust by Example (RBE) is a collection of runnable examples that illustrate various Rust concepts and standard libraries.

## 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。例如，当 `cfg!` 用于条件时，if/else 表达式中的所有代码块都需要是有效的，无论 `cfg!` 正在评估什么。

    // 这个函数只有在目标操作系统是 linux 时才会被编译
    #[cfg(target_os = "linux")]
    fn are_you_on_linux() {
        println!("你正在运行 Linux！");
    }

    // 而这个函数只有在目标操作系统**不是** 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!` 宏和宏。