我有一个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;

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

void* my_dummy_dest(void* foo);

的问题(其实这只是一个警告,但我想抑制它)发生时,我尝试设置我的结构的“目标”字段“my_dummy_dest”:

my_struct.dest = &my_dummy_dest;

我得到一个“警告:从兼容的指针类型分配”

同样的,当我刚刚对它们进行比较:

if (my_struct.dest == &my_dummy_dest)

我得到一个“警告:不同指针类型的比较缺乏的铸造”

但我没有得到任何警告,当我设定的“目标”字段与另一个程序。我不知道为什么我有这些警告。

有帮助吗?

解决方案

您虚设析构函数被声明为返回一个空隙的指针下,不空隙。此声明不会为你的析构函数指针匹配的typedef。

其他提示

在的typedef应该是:

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

由于my_dummy_test返回void * 而不是无效。如果你想返回void *,typedef的应该是

typedef void* (*my_destructor)(void *);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top