如何在函数指针中创建唯一的静态变量?

时间:2019-08-03 22:24:48

标签: c

我正在尝试为每个函数指针创建一个唯一的静态变量,并且我需要使用函数指针,因为我计划在结构内部使用它们。

我尝试创建一个指向带有静态变量的函数的函数指针,但这两个变量都是相同的变量。

#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,因此它必须将相同的变量增加两次。

2 个答案:

答案 0 :(得分:1)

这不是函数指针可以做的事情。

您可能需要某种面向对象的方法,而不是函数指针,因此您可以有多个对象,每个对象都有自己的专用test字段,但是共享相同的 code

为此,您需要使用C ++而不是普通C。

((如果由于某种原因,这对您不可用,并且您必须用C语言完成您的工作,则没有实际方法可以为函数提供额外的上下文指针作为参数。或者,如果您只需要有限数量的函数实例,就可以编写几次,它们可以共享一个完成实际工作的helper函数,但是每个实例都需要声明自己的内存以使该helper函数可以运行。

答案 1 :(得分:-1)

static变量在编译后的行为类似于全局变量。它映射到程序的.data部分,与使用它的指针,引用,上下文的数量无关。

如果您希望每个函数使用都有自己的分配,则可以尝试使此函数static inline并将其导出到头文件中。