除錯巨集
(所有這些都是不穩定的,因此只能在夜間編譯器中使用。)
log_syntax!()
#![`feature(log_syntax)`]
macro_rules! logged_sum {
($base:expr) => {
{ log_syntax!(base = $base); $base }
};
($a:expr, $($rest:expr),+) => {
{ log_syntax!(a = $a, rest = $($rest),+); $a + logged_sum!($($rest),+) }
};
}
const V: u32 = logged_sum!(1, 2, 3);
在編譯期間,它會將以下內容列印到 stdout:
a = 1,rest = 2,3a
= 2,rest = 3
base = 3
- 擴充套件了
執行編譯器:
rustc -Z unstable-options --pretty expanded filename.rs
這將擴充套件所有巨集,然後將擴充套件結果列印到 stdout,例如上面可能會輸出:
#![`feature(prelude_import)`]
#![no_std]
#![`feature(log_syntax)`]
#[prelude_import]
use std::prelude::v1::*;
#[macro_use]
extern crate std as std;
const V: u32 = { false; 1 + { false; 2 + { false; 3 } } };
(這類似於 C 編譯器 gcc
和 clang
中的 -E
標誌。)