++私はこのDEBUGマクロのようなものを使用します。Rustにはデバッグマクロがありますか? Cでは
#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
は錆を似たものを持っていますか?
++私はこのDEBUGマクロのようなものを使用します。Rustにはデバッグマクロがありますか? Cでは
#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
は錆を似たものを持っていますか?
それがDKの答えで述べたようにlog
クレートのようなものを使用することは理にかなっていますが、ここであなたが求めて何の直接対応を行う方法は次のとおりです。
// 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
としません。
自分で定義することもできますが、さまざまな目的でいくつかのマクロを定義するlog
クレートを使用する方が簡単です(the log
documentationを参照)。
クレートは、ログ用にフロントエンドのみを提供します。バックエンドを選択する必要があります。 log
のドキュメントには基本的な例がありますが、env_logger
やlog4rs
のようなものを使用できます。
これは、 'debug_assert! 'のようなマクロを制御する既存の' debug_assertions'属性を利用することでもう少し簡潔になります。 '#[cfg(feature =" my_debug ")]'ビットを '#[cfg(debug_assertions)]に変更し、その変更を' Cargo.toml'にドロップしてください。このようにして、リリースビルドではデバッグコードが自動的に無視されます。 –