【发布时间】:2013-02-19 21:04:38
【问题描述】:
给定以下用于更新双向链表中节点的函数声明:
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 unary '&' operator”怎么办?我传递的析构函数(以及它所操作的结构)定义如下:
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 指针参数声明函数指针是将通用函数指针传递给其他函数的好方法......
【问题讨论】:
标签: c function-pointers