2.10 Macros
2.10.1 Macros in Rust
Macros provide metaprogramming capabilities.
- Declarative Macros: Use
macro_rules!
to define patterns.
macro_rules! say_hello { () => { println!("Hello!"); }; } fn main() { say_hello!(); }
- Procedural Macros: Allow you to generate code using Rust code (more advanced).
2.10.2 The println!
Macro
println!
is a macro because it can accept a variable number of arguments and perform formatting at compile time.
2.10.3 Comparison with C
- C has preprocessor macros using
#define
.
#define SQUARE(x) ((x) * (x))
int main() {
int result = SQUARE(5); // Expands to ((5) * (5))
printf("%d\n", result);
return 0;
}
- C macros are text substitution; Rust macros are more powerful and safer.