A function and a macro with same name.

~# cat a.c
#include<stdio.h>
#define inc(a) inc(a,1)
int inc(int a, int b)
{
return a+b;
}
int main()
{
int k = 9;
k = inc(k);
printf("%d\n", k);
return 0;
}
~# gcc a.c
a.c:3:21: error: macro "inc" passed 2 arguments, but takes just 1
a.c:4:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
~#

Here both function and macro with same name can't co exist.
Preprocessor performs macro expansion at function definition as well (at line 3).
But we don't want preprocessor to perform macro expansion there.
So we simply enclose the function name with parentheses while defining the function.
And we are done.

~# cat a.c
#include<stdio.h>
#define inc(a) inc(a,1)
int (inc)(int a, int b)
{
return a+b;
}
int main()
{
int k = 9;
k = inc(k);
printf("%d\n", k);
return 0;
}
~# gcc a.c
~# ./a.out
10
~#