If the function call is withing a loop, you're gonna call it for the number of times loop runs. Say, for example, loop runs 1000 times, it will result in time and memory overhead of creating and initializing 1000 activation records in call stack. If you use macro, the function call is replaced by the actual code defined by macro so no its same as executing those lines of code without additional function calling or memory usage.
PS: If function gets inlined -- which normally happens for most small functions, then it has the same effect as macros. Also, there is no guarantee that macros (inlined functions also) will always be faster than functions. This is because they can lead to an increase in code size, which can lead to potential Instruction cache miss. The best place to use macros is where a function has to be executed with different parameters and these parameters are known while writing the code -- this can avoid the execution overhead of processing that parameter.