What is a macro and what is it actually used for?

Hello everyone, I am currently learning blueprint via paid training from Evans Bohl for those who know, and I was wondering what a macro is actually used for and what is the difference with a function?

They look very similar on the surface, but there is a fundamental difference: All the macros in your code get replaced by the actual code before the game is run ( just like a text replacement ), whereas only one copy of a function is loaded, and any code that calls it is routed through it at run time.

There are a lot of other differences, for example

1 You can have multiple entry and exit execution pins on macros

2 Functions handle short circuit exiting more gracefully

3 You can write recursive code with functions ( not recommended ), but not macros

4 You can’t have ‘latency’ in functions ( like delay nodes )

5 etc…

I’m sure someone else can chime in.