保存由参数传递的函数指针

时间:2014-02-25 02:24:13

标签: c

我遵循声明:

typedef void (*foo)(int op, int arg1, int arg2);
void goo(foo f);
{
  BODY;
}

我希望在我的代码中存储传递给goo的函数f但是修改body并添加全局foo变量的自然方式(我不能更改goo的定义但我能够编辑body):

foo _f;
void goo(foo f);
{
  _f = f;
}

正在制作段错误。我会感激任何提示。

2 个答案:

答案 0 :(得分:0)

修改 根据您的完整代码,您应该将test.c中函数callback()的名称更改为“callback”以外的其他名称,因为您已在pagesim.c中定义了该符号。我做了这个编辑,程序运行正常。


这是一个编译和运行的测试,也许你可以根据这个发现你的错误:

#include <stdio.h>
typedef void (*foo)(int op, int arg1, int arg2);

foo _f;

void goo(foo f)
{
    _f = f;
    _f(1, 2, 3);
}

void testfxn(int op, int arg1, int arg2) {
    printf("%d %d %d", op, arg1, arg2);
}

void main() {
    goo(testfxn);
}

答案 1 :(得分:0)

根据您粘贴的代码,您在哪里实际定义类型

void func(int op, int arg1, int arg2)

段错误来自goo(),您会看到printf()的输出,但以下callback2()调用会生成段错误。 callback2是一个函数指针,但它不指向任何实际函数。

你应该定义一个函数

void func(int op, int arg1, int arg2)
{
     printf("%d %d %d\n", op, arg1, arg2);
}

然后您将goo()page_sim_init()称为

goo(func);
page_sim_init(page_size, mem_size, addr_space_size,
                    strategy, max_concurrent_operations, func);