正确使用通用函数指针

时间:2013-02-19 21:04:38

标签: c function-pointers

给出用于更新双向链表中节点的函数的以下声明:

uint8 dl_update(DL_LIST **node, uint16 new_tag, void *new_object,
    uint32 new_size, void (*destructor)(void*))

以下调用该函数:

dl_update(&dlt_list, _TAG, zulu, sizeof(*zulu),
    (void(*)(void*)) &_free_dlt_object(delta));

最后一个参数怎么会导致编译器发出错误消息“lvalue required as aary'&'运营商“?我传递的析构函数(以及它操作的结构)定义如下:

typedef struct DLT_OBJECT {
    char *word;
    uint8 number;
} DLT_OBJECT;

void _free_dlt_object(DLT_OBJECT *object) {
    free(object->word);
    free(object);
}

以下question似乎意味着可以投射函数指针,所以我不相信我这样做会导致问题,尽管我的代码是在裸机嵌入式系统上运行的(在question列为可能的陷阱我不确定。

这是一个简单的语法错误,还是更多的结构问题?我的印象是,使用void指针参数声明函数指针是将泛型函数指针传递给其他函数的好方法......

1 个答案:

答案 0 :(得分:2)

当使用函数指针时,你只是传递一个函数,所以你就这样进行调用

dl_update(&dlt_list, _TAG, zulu, sizeof(*zulu), _free_dlt_object);