我正在尝试为每个函数指针创建一个唯一的静态变量,并且我需要使用函数指针,因为我计划在结构内部使用它们。
我尝试创建一个指向带有静态变量的函数的函数指针,但这两个变量都是相同的变量。
#include <stdio.h>
void foo()
{
static int test = 10;
test++;
printf("%d\n", test);
}
void (*bar)() = foo;
int main()
{
foo();
bar();
return 0;
}
我希望这能给我11和11,但我却得到11和12,因此它必须将相同的变量增加两次。
答案 0 :(得分:1)
这不是函数指针可以做的事情。
您可能需要某种面向对象的方法,而不是函数指针,因此您可以有多个对象,每个对象都有自己的专用test
字段,但是共享相同的 code 。>
为此,您需要使用C ++而不是普通C。
((如果由于某种原因,这对您不可用,并且您必须用C语言完成您的工作,则没有实际方法可以为函数提供额外的上下文指针作为参数。或者,如果您只需要有限数量的函数实例,就可以编写几次,它们可以共享一个完成实际工作的helper函数,但是每个实例都需要声明自己的内存以使该helper函数可以运行。
答案 1 :(得分:-1)
static
变量在编译后的行为类似于全局变量。它映射到程序的.data
部分,与使用它的指针,引用,上下文的数量无关。
如果您希望每个函数使用都有自己的分配,则可以尝试使此函数static inline
并将其导出到头文件中。