2011-12-19 43 views
16

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

它看起来像这样:

void (*current_menu)(int); 

我们究竟写menus.c,menus.h和主?

回答

0

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

18

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

如果你想让一个变量在多个源文件中可见,最简单的解决方案是在头文件中声明它为extern,并在其他地方定义。

在标题:

extern void (*current_menu)(int); 

在一个源文件:

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

ty,现在有效 – user1106072

+2

&符号不是绝对必要的 – Dave

+1

这是真的,@Dave。在C中,为了清晰起见,这是我的一种风格选择。在C++中,有时需要在某些模板上下文中使用,所以我只是为了一致性而做。 –

6

这往往有助于使用typedef函数指针,这样你就可以命名类型的东西描述:

typedef void (*MenuFunction)(int); 

然后,你将有这种类型的全局变量,可能在menus.c,并宣布(与extern)在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; 

从main.c中,你可以再做:

#include "menu.h" 

current_menu(4711); 

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

+0

非常真实! '函数'也可用,如果你有权访问boost或C++ 11。 –