C语言:函数指针和typedef问题

9

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

我看到一条警告:“warning: assignment from incompatible pointer type”
仅仅比较它们时,也会有同样的警告。
if (my_struct.dest == &my_dummy_dest)

当我进行比较指针类型时,出现了“warning: comparison of distinct pointer types lacks a cast”的警告。但当我使用另一个例程设置“dest”字段时,没有警告。我不明白为什么会出现这些警告。

3个回答

11
你的虚构析构函数声明返回一个指针类型,而不是 void。这个声明和你的析构函数指针的 typedef 不匹配。

哎呀,我知道这是些愚蠢的错误,不过还是谢谢你 :) - claf

5

这个typedef应该是:

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

5

因为my_dummy_test返回void*而不是void。如果你想返回void*,那么typedef应该如下所示:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接