c++ - Funciona con el mismo nombre que una macro
puzzle (4)
Hace (f)(3);
¿trabajo?
El preprocesador de C no expande la macro f
interior ( )
.
#include<stdio.h>
void f(int a)
{
printf("%d", a);
}
#define f(a) {}
int main()
{
/* call f : function */
}
¿Cómo llamar a f
(la función)? Escribir f(3)
no funciona porque se reemplaza por {}
Una solución es publicada por @Prasoon, otra podría ser simplemente introducir otro nombre para la función, SI no puede cambiar el nombre de la función, ni el nombre de la macro:
#include<stdio.h>
void f(int a)
{
printf("%d", a);
}
#define fun (f) //braces is necessary
#define f(a) {}
int main()
{
fun(100);
}
Demostración en línea: http://www.ideone.com/fbTcE
Utilice el puntero de función para lograr esto:
int main() {
void (*p)(int a);
p = f;
p(3); //--> will call f(3)
return 0;
}
int main()
{
#undef f // clear f!
f(3);
}