mirror of
https://github.com/ahgamut/rust-ape-example.git
synced 2024-05-15 10:02:42 +00:00
51 lines
1.2 KiB
Rust
51 lines
1.2 KiB
Rust
// ./src/macros/designators.md
|
|
|
|
|
|
macro_rules! create_function {
|
|
// This macro takes an argument of designator `ident` and
|
|
// creates a function named `$func_name`.
|
|
// The `ident` designator is used for variable/function names.
|
|
($func_name:ident) => {
|
|
fn $func_name() {
|
|
// The `stringify!` macro converts an `ident` into a string.
|
|
println!("You called {:?}()",
|
|
stringify!($func_name));
|
|
}
|
|
};
|
|
}
|
|
|
|
// Create functions named `foo` and `bar` with the above macro.
|
|
create_function!(foo);
|
|
create_function!(bar);
|
|
|
|
macro_rules! print_result {
|
|
// This macro takes an expression of type `expr` and prints
|
|
// it as a string along with its result.
|
|
// The `expr` designator is used for expressions.
|
|
($expression:expr) => {
|
|
// `stringify!` will convert the expression *as it is* into a string.
|
|
println!("{:?} = {:?}",
|
|
stringify!($expression),
|
|
$expression);
|
|
};
|
|
}
|
|
|
|
fn part0() {
|
|
foo();
|
|
bar();
|
|
|
|
print_result!(1u32 + 1);
|
|
|
|
// Recall that blocks are expressions too!
|
|
print_result!({
|
|
let x = 1u32;
|
|
|
|
x * x + 2 * x - 1
|
|
});
|
|
}
|
|
|
|
pub fn main() {
|
|
part0();
|
|
}
|
|
|