vectores tipos punteros puntero matrices funciones declaracion con comparar aritmetica c function pointers header prototype-programming

tipos - punteros y vectores en c



¿Cómo declarar el puntero a la función en el encabezado y en el archivo c? (3)

Estoy un poco confundido sobre cómo declarar un puntero de función en un archivo de encabezado. Quiero usarlo en main y en un archivo llamado menus.c y declararlo en menus.h supongo. Queremos inicializar para apuntar a una determinada función.

se parece a esto:

void (*current_menu)(int);

¿Qué escribimos en menus.c, menus.h y main?


A menudo es útil usar typedef con punteros a función, por lo que puede nombrar el tipo de algo descriptivo:

typedef void (*MenuFunction)(int);

Entonces tendría una variable global de este tipo, probablemente en menus.c, y declarada (con extern ) en menus.h:

static void my_first_menu_function(int x) { printf("the menu function got %d/n", x); } MenuFunction current_menu = my_first_menu_function;

Desde main.c, puede hacer:

#include "menu.h" current_menu(4711);

para llamar a cualquier función apuntada actualmente por current_menu .


Un puntero a la función sigue siendo un puntero, lo que significa que todavía es una variable.

Si desea que una variable sea visible desde varios archivos fuente, la solución más simple es declararla extern en un encabezado, con la definición en otro lugar.

En un encabezado:

extern void (*current_menu)(int);

En un archivo fuente:

void (*current_menu)(int) = &the_func_i_want;


Una función de puntero no tiene una definición de función. No es más que un puntero a un tipo, el tipo que se especifica por el tipo de retorno de la función y la lista de parámetros. Lo que necesita hacer es definir una función con la misma lista de parámetros y el tipo de retorno, luego use su función de puntero para mantener la dirección de esa función. A continuación, puede llamar a la función a través del puntero.