macro hygiene
Variables a macro creates can't clash with variables at the place it's used.
Hygiene keeps identifiers introduced inside a macro_rules! expansion separate from same-named identifiers at the call site (for local variables and labels).
Examples
A macro that expands to
let x = 99;leaves the caller's ownxalone: aftermake_x!();,println!("{x}")still prints5.
See also