функция с тем же именем, что и макрос - PullRequest
16 голосов
/ 21 мая 2011
#include<stdio.h>
void f(int a)
{
printf("%d", a);
}
#define f(a) {}

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

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

Ответы [ 4 ]

16 голосов
/ 21 мая 2011

Работает ли (f)(3);?

Препроцессор C не раскрывает макрос f внутри ( ).


7 голосов
/ 21 мая 2011
int main()
{
#undef f  // clear f!
 f(3);
}
4 голосов
/ 22 мая 2011

Используйте указатель на функцию для достижения этой цели:

int main() {
    void (*p)(int a);
    p = f;
    p(3); //--> will call f(3)
    return 0;
}
1 голос
/ 21 мая 2011

Одно решение опубликовано @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

...