Подтвердить что ты не робот

Функция с тем же именем, что и макрос

#include<stdio.h>
void f(int a)
{
printf("%d", a);
}
#define f(a) {}

int main()
{
 /* call f : function */
}

Как вызвать f (функция)? Запись f(3) не работает, потому что она заменяется на {}

4b9b3361

Ответ 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