【发布时间】:2016-08-01 15:10:06
【问题描述】:
C 中的void (*xmlHashScanner)(void *payload, void *data, xmlChar *name) 和void *xmlHashScanner(void *payload, void *data, xmlChar *name) 有什么区别?
为什么它们的行为不同?
xmlHashScanner 是库 libxml2 中的用户定义函数。
当我尝试使用稍微不同的原型重新定义此函数时:void *xmlHashScanner 而不是 void (*xmlHashScanner) 我有以下错误:
error: ‘xmlHashScanner’ redeclared as different kind of symbol
void *xmlHashScanner(void *payload, void *data, xmlChar *name)
^
In file included from /usr/include/libxml2/libxml/parser.h:18:0,
from /home/solar/Bureau/parser/src/diam_dict.c:12:
/usr/include/libxml2/libxml/hash.h:88:16: note: previous declaration of ‘xmlHashScanner’ was here
typedef void (*xmlHashScanner)(void *payload, void *data, xmlChar *name);
我想知道他们两个有什么区别。
【问题讨论】:
-
你能解释一下不同的行为吗?
-
@ScottHunter 我说它们是不同的,因为一个编译而另一个不编译。
-
void (*xmlHashScanner)()是一个指向 void 函数的指针。void *xmlHashScanner()是一个返回 void 指针的函数。 -
@Arkadiy 指向 void 函数的指针有什么用?第一个返回什么?
-
你完全迷路了。我知道您的问题出在哪里,但是您提出问题的方式无法明智地回答。请提供MCVE。至于函数的用途,你可以试试你正在使用的 API 的the docs。这是一个回调声明。有些函数需要一个函数指针作为参数。然后,他们将“回调”您的功能,作为其操作的一部分。 Are you on the same course?
标签: c