Saltar al contenido

¿Puntero de función typedef?

Recuerda que en la informática cualquier problema casi siempere suele tener varias soluciones, así que aquí compartiremos lo más óptimo y eficiente.

Solución:

typedef es una construcción del lenguaje que asocia un nombre a un tipo.
Lo usa de la misma manera que usaría el tipo original, por ejemplo

  typedef int myinteger;
  typedef char *mystring;
  typedef void (*myfunc)();

usarlos como

  myinteger i;   // is equivalent to    int i;
  mystring s;    // is the same as      char *s;
  myfunc f;      // compile equally as  void (*f)();

Como puede ver, podría simplemente reemplazar el tipificado nombre con su definición dada arriba.

La dificultad radica en el puntero a la sintaxis y legibilidad de las funciones en C y C++, y la typedef puede mejorar la legibilidad de dichas declaraciones. Sin embargo, la sintaxis es apropiada, ya que las funciones, a diferencia de otros tipos más simples, pueden tener un valor de retorno y parámetros, por lo tanto, la declaración a veces larga y compleja de un puntero a función.

La legibilidad puede comenzar a ser realmente complicada con punteros a matrices de funciones y algunos otros sabores aún más indirectos.

Para responder a sus tres preguntas

  • ¿Por qué se usa typedef?
    Para facilitar la lectura del código, especialmente para punteros a funciones o nombres de estructuras.

  • La sintaxis parece extraña (en el puntero a la declaración de función)
    Esa sintaxis no es obvia de leer, al menos al principio. Usando un typedef declaración en cambio facilita la lectura

  • ¿Se crea un puntero de función para almacenar la dirección de memoria de una función?
    Sí, un puntero de función almacena la dirección de una función. Esto no tiene nada que ver con el typedef construcción que solo facilita la escritura/lectura de un programa; el compilador simplemente expande la definición de typedef antes de compilar el código real.

Ejemplo:

typedef int (*t_somefunc)(int,int);

int product(int u, int v) 
  return u*v;


t_somefunc afunc = &product;
...
int x2 = (*afunc)(123, 456); // call product() to calculate 123*456

  1. typedef se utiliza para tipos de alias; en este caso estás haciendo un alias FunctionFunc para void(*)().

  2. De hecho, la sintaxis parece extraña, eche un vistazo a esto:

    typedef   void      (*FunctionFunc)  ( );
    //         ^                ^         ^
    //     return type      type name  arguments
    
  3. No, esto simplemente le dice al compilador que el FunctionFunc type será un puntero de función, no definir uno, así:

    FunctionFunc x;
    void doSomething()  printf("Hello theren"); 
    x = &doSomething;
    
    x(); //prints "Hello there"
    

Sin el typedef palabra, en C++ la declaración declararía una variable FunctionFunc de tipo puntero a función sin argumentos, devolviendo void.

Con el typedef en su lugar define FunctionFunc como un nombre para ese tipo.

Comentarios y puntuaciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *