C:函数指针和typedef问题

时间:2009-04-05 10:45:53

标签: c function-pointers typedef

我有一个C函数,它将一个函数指针作为参数,它是一个析构函数,我将在程序结束时调用它。这是我的功能原型:

int store_dest(void (*routine)(void *));

我想将此函数指针存储到包含其他信息的结构中。为了有一个很好的结构,我希望有一个typedef到这个函数指针。这是我的typedef:

typedef void (*my_destructor)(void *);

这是我的结构:

typedef struct my_struct{
  my_destructor dest;
  other_info ...
} my_struct;

在初始化步骤中,我想将“dest”字段设置为我的函数,这里是这个函数的原型:

void* my_dummy_dest(void* foo);

当我尝试将我的结构的“dest”字段设置为“my_dummy_dest”时,问题(实际上它只是一个警告,但我想抑制它)发生:

my_struct.dest = &my_dummy_dest;

我收到“警告:从不兼容的指针类型分配”

当我只是比较它们时相同:

if (my_struct.dest == &my_dummy_dest)

我得到一个“警告:不同指针类型的比较缺少演员”

但是当我用另一个例程设置“dest”字段时,我没有得到任何警告。我不明白为什么我会收到这些警告。

3 个答案:

答案 0 :(得分:11)

您的虚拟析构函数被声明为返回void 指针,而不是void。此声明与析构函数指针的typedef不匹配。

答案 1 :(得分:5)

typedef应为:

typedef void *(*my_destructor)(void *);

答案 2 :(得分:5)

因为my_dummy_test返回void * 而不是无效。如果要返回void *,则typedef应为

typedef void* (*my_destructor)(void *);