On Macros, the function's code gets inserted into the caller's code stream. This can, depending on many other things, improve performance, because the optimizer can procedurally integrate the called code — optimize the called code into the caller
But beware, because on macros argument types are not checked.
A good reference to inline functions (if you are also using C++) and a little bit of macros is.
http://www.parashift.com/c++-faq-lite/inline-functions.html#faq-9.5