< 返回版块

Louys·Miaoa 豆沙饼 发表于 2024-06-26 10:21

Tags:cfg 条件编译

大佬们,问一个条件编译的问题。(答案已总结,在最后,两种办法)

cargo r --features=f1 

这边编译不通过,请问有没有其他办法可以通过编译呢,我需要拆分两段代码。一段声明变量,一段使用变量

上代码

fn main() {
    #[cfg(feature = "f1")] {
        let mut x = vec![];
    }
    #[cfg(feature = "f1")] {
        x.push(123);
        println!("f1");
    }
}

解决办法一:

fn main() {
    #[cfg(feature = "f1")] 
        let mut x = vec![];
    #[cfg(feature = "f1")] {
        x.push(123);
        println!("f1");
    }
}

解决办法二:

use cfg_if::cfg_if;

fn main() {
    cfg_if! {
        if #[cfg(feature = "f1")] {
            let mut x = vec![];
        }
    }
    cfg_if! {
        if #[cfg(feature = "f1")] {
            x.push(123);
            println!("{x:#?}");
        }
    }
}

评论区

写评论
作者 Louys·Miaoa 豆沙饼 2024-07-15 10:32

哥,您是对滴。6

lywa1998 2024-06-26 15:02

是变量作用域的问题。

fn main() {
    #[cfg(feature = "f1")] {
        let mut x = vec![];
    }
    #[cfg(feature = "f1")] {
        x.push(123);
        println!("f1");
    }
}

使用 cargo-expand 展开后为

#![feature(prelude_import)]
#[prelude_import]
use std::prelude::rust_2021::*;
#[macro_use]
extern crate std;
fn main() {
    #[cfg(feature = "f1")]
    {
        let mut x = ::alloc::vec::Vec::new();
    }
    #[cfg(feature = "f1")]
    {
        x.push(123);
        {
            ::std::io::_print(format_args!("f1\n"));
        };
    }
}
作者 Louys·Miaoa 豆沙饼 2024-06-26 11:42

确实对cfg有点误解了

--
👇
gorust21: 具体啥粗,是不是对feature有误解

作者 Louys·Miaoa 豆沙饼 2024-06-26 11:41

谢谢哥,您的方法可行。感谢

--
👇
ManonLoki: ```rust

fn main() { #[cfg(feature = "f1")] let mut x = vec![];

#[cfg(feature = "f1")] {
    x.push(123);
    println!("f1");
}

}


要么这样 要么你直接整合到一个feature里
作者 Louys·Miaoa 豆沙饼 2024-06-26 11:00

这样就可以了

use cfg_if::cfg_if;

fn main() {
    cfg_if! {
        if #[cfg(feature = "f1")] {
            let mut x = vec![];
        }
    }
    cfg_if! {
        if #[cfg(feature = "f1")] {
            x.push(123);
            println!("{x:#?}");
        }
    }
}
gorust21 2024-06-26 10:46

具体啥粗,是不是对feature有误解

ManonLoki 2024-06-26 10:43

fn main() {
    #[cfg(feature = "f1")] 
    let mut x = vec![];
    
    #[cfg(feature = "f1")] {
        x.push(123);
        println!("f1");
    }
}


要么这样 要么你直接整合到一个feature里

1 共 7 条评论, 1 页