Ответ 1
Работает ли (f)(3);
?
Препроцессор C не расширяет макрос f
внутри ( )
.
#include<stdio.h>
void f(int a)
{
printf("%d", a);
}
#define f(a) {}
int main()
{
/* call f : function */
}
Как вызвать f
(функция)? Запись f(3)
не работает, потому что она заменяется на {}
Работает ли (f)(3);
?
Препроцессор C не расширяет макрос f
внутри ( )
.
int main()
{
#undef f // clear f!
f(3);
}
Для достижения этой цели используйте указатель на функции:
int main() {
void (*p)(int a);
p = f;
p(3); //--> will call f(3)
return 0;
}
Одно решение опубликовано @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