Hmm... doesn't rustc actually copy/paste token trees ? That means you cannot mess up precedence, as you can in C. For example,
C:
#define MULTWO(a) (a * 2)
MULTWO(4 + 1) // `6`
MULTWO((4 + 1)) // `10`
rust:
macro_rules! mul_two {
($a:expr) => { $a * 2 }
}
mul_two!(4 + 1); // always `10`
mul_two!((4 + 1)); // always `10`