除錯巨集

(所有這些都是不穩定的,因此只能在夜間編譯器中使用。)

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 編譯器 gccclang 中的 -E 標誌。)