c++ c puzzle

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); }