gpt4 book ai didi

正确使用泛型函数指针

转载 作者:太空宇宙 更新时间:2023-11-04 02:58:18 25 4
gpt4 key购买 nike

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

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));

最后一个参数会导致编译器发出错误消息“左值需要作为一元‘&’运算符”怎么办?我传递的析构函数(及其操作的结构)定义如下:

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 指针参数声明函数指针是将通用函数指针传递给其他函数的好方法...

最佳答案

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

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

关于正确使用泛型函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14967398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com