Функция с тем же именем, что и макрос #include<stdio.h> void f(int a) { printf("%d", a); } #define f(a) {} int main() { /* call f : function */ } Как вызвать f (функция)? Запись f(3) не работает, потому что она заменяется на {} Ответ 1 Работает ли (f)(3);? Препроцессор C не расширяет макрос f внутри ( ). Ответ 2 int main() { #undef f // clear f! f(3); } Ответ 3 Для достижения этой цели используйте указатель на функции: int main() { void (*p)(int a); p = f; p(3); //--> will call f(3) return 0; } Ответ 4 Одно решение опубликовано @Prasoon, другое может просто ввести другое имя для функции, если вы не можете изменить имя функции, ни имя макроса: #include<stdio.h> void f(int a) { printf("%d", a); } #define fun (f) //braces is necessary #define f(a) {} int main() { fun(100); } Демо-версия онлайн: http://www.ideone.com/fbTcE
Ответ 3 Для достижения этой цели используйте указатель на функции: int main() { void (*p)(int a); p = f; p(3); //--> will call f(3) return 0; }
Ответ 4 Одно решение опубликовано @Prasoon, другое может просто ввести другое имя для функции, если вы не можете изменить имя функции, ни имя макроса: #include<stdio.h> void f(int a) { printf("%d", a); } #define fun (f) //braces is necessary #define f(a) {} int main() { fun(100); } Демо-версия онлайн: http://www.ideone.com/fbTcE