Primary drawback of macros is that it doesn't do type checking otherwise for all practical purpose I will prefer it over functions for the following reasons -
The function call requires a branch (jump to another address) + stack frame creation for a function. Both are costly operations.
Now a days, inline functions are preferred over macro in case the number of lines in the function are less than or equal to 20. The inline functions are inlined (no jump, no stack frame) + type checking (disadvantage of macro).