如何在头文件和c文件中声明函数指针?

时间:2011-12-19 14:22:19

标签: c function pointers header prototype-programming

我对如何在头文件中声明函数指针感到困惑。 我想在main和一个名为menus.c的文件中使用它,并在menus.h中声明它。我假设。 我们想要初始化以指向某个功能。

它看起来像这样:

void (*current_menu)(int);

我们在menus.c,menus.h和main中写了什么?

3 个答案:

答案 0 :(得分:19)

函数指针仍然是一个指针,这意味着它仍然是一个变量。

如果您希望从多个源文件中看到变量,最简单的解决方案是在标题中声明它extern,并在其他地方定义。

标题:

extern void (*current_menu)(int);

在一个源文件中:

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

答案 1 :(得分:7)

typedef与函数指针一起使用通常很有帮助,因此您可以将类型命名为描述性的类型:

typedef void (*MenuFunction)(int);

然后你会有一个这种类型的全局变量,可能在menus.c中,并在menus.h中声明(带有extern):

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

MenuFunction current_menu = my_first_menu_function;

从main.c开始,您可以这样做:

#include "menu.h"

current_menu(4711);

调用current_menu当前指向的任何函数。

答案 2 :(得分:0)

指针函数本身没有函数定义。它只不过是一个指向类型的指针,该类型由函数的返回类型和参数列表指定。你需要做的是定义一个具有相同参数列表和返回类型的函数,然后使用指针函数来保存该函数的地址。然后,您可以通过指针调用该函数。