在C++中,我使用类似于DEBUG宏的东西:

#ifdef DEBUG
#define DEBUG_STDERR(x) (std::cerr << (x))
#define DEBUG_STDOUT(x) (std::cout << (x))
#else 
#define DEBUG_STDERR(x)
#define DEBUG_STDOUT(x)
#endif

rust 有类似的东西吗?

推荐答案

虽然像DK的回答中提到的那样使用log crate 是有意义的,但以下是如何直接完成你所要求的:

// The debug version
#[cfg(feature = "my_debug")]
macro_rules! debug_print {
    ($( $args:expr ),*) => { println!( $( $args ),* ); }
}

// Non-debug version
#[cfg(not(feature = "my_debug"))]
macro_rules! debug_print {
    ($( $args:expr ),*) => {}
}

fn main() {
    debug_print!("Debug only {}", 123);
}

在你的Cargo.toml中,添加[features]部分:

[features]
my_debug = []

然后,输出显示为cargo run --features my_debug,而不是普通的cargo run.

Rust相关问答推荐

Rust kill std::processs::child

如何处理动态 struct 实例化?

是否有可能同时避免不兼容的不透明类型和代码重复?

在特征中使用Async时,如何解决不透明类型`impl Future<;out=self>;`不满足其关联的类型边界和警告?

如何将`Join_all``Vec<;Result<;Vec<;Foo&>;,Anywhere::Error&>;`合并到`Result<;Vec<;Foo&>;,Anywhere::Error&>;`

具有对同一类型的另一个实例的可变引用的

Box::new()会从一个堆栈复制到另一个堆吗?

如何点击()迭代器?

使用极点数据帧时,找不到枚举结果的方法lazy()

JSON5中的变量类型(serde)

如何使用Actix Web for Rust高效地为大文件服务

rust中的库插件管理器,现在是否可行?

如何执行数组文字的编译时串联?

OpenGL 如何同时渲染无纹理的四边形和有纹理的四边形

在不安全的 Rust 中存储对 struct 内部数据的静态引用是否合法?

了解 Rust 闭包:为什么它们持续持有可变引用?

Rust Serde 为 Option:: 创建反序列化器

Rust 中 `Option` 的内存开销不是常量

当用作函数参数时,不强制执行与绑定的关联类型

有没有办法使用 NASM 语法进行内联汇编?