Macro Overloading

A macro and a function can have the same name. If one wants to disable a macro at some point then she/he must use #undef macroname. 

However this can be achieved even without un-defining the macro.
putchar is implemented as macro as well as function. 
putchar('M'); will be handled as a macro and (putchar)('F'); will invoke the function 

Do it yourself
Write a function and a macro with same name but different body 
Now call using (name)(…) & name(…)