Basically, macros are a way of writing code that writes other code, which is known as metaprogramming. I have also used 'println!()' macros in my previous blog. Here macros expand to produce more code than the code you've written manually. Metaprogramming helps us to reduce the amount of code we write and maintain.
In the function signature, it should declare the number and type of parameter function has.
The downside to implementing a macro instead of a function is that macro definitions are more complex than function definitions because you're writing Rust code that writes Rust code.
We must define macros into scope before we call them in a file. Whereas we can define functions anywhere and call them anywhere.
This blog is at glance with types of macros will continue with the briefing in next one.