it-swarm-pt.tech

Como declarar o ponteiro de função no cabeçalho e no arquivo c?

Estou um pouco confuso sobre como declarar um ponteiro de função em um arquivo de cabeçalho. Eu quero usá-lo no principal e em um arquivo chamado menus.ce declará-lo em menus.h eu suponho. Queremos inicializar para apontar para uma determinada função.

se parece com isso:

void (*current_menu)(int);

O que escrevemos em menus.c, menus.he main?

18
user1106072

Um ponteiro de função ainda é um ponteiro, o que significa que ainda é uma variável.

Se você quiser que uma variável seja visível de vários arquivos de origem, a solução mais simples é declará-la extern em um cabeçalho, com a definição em outro lugar.

Em um cabeçalho:

extern void (*current_menu)(int);

Em um arquivo de origem:

void (*current_menu)(int) = &the_func_i_want;
21
Drew Dormann

Muitas vezes é útil usar typedef com ponteiros de função, para que você possa nomear o tipo de forma descritiva:

typedef void (*MenuFunction)(int);

Então você teria uma variável global deste tipo, provavelmente em menus.c, e declarada (com extern) em 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;

Em main.c, você pode fazer:

#include "menu.h"

current_menu(4711);

para chamar qualquer função atualmente apontada por current_menu.

8
unwind

Uma função de ponteiro em si não tem uma definição de função. Não é nada mais do que um ponteiro para um tipo, o tipo sendo especificado pelo tipo de retorno da função e a lista de parâmetros. O que você precisa fazer é definir uma função com a mesma lista de parâmetros e tipo de retorno e, em seguida, usar a função de ponteiro para armazenar o endereço dessa função. Você pode então chamar a função por meio do ponteiro.

0
MGZero