В чем разница между void (*xmlHashScanner)(void *payload, void *data, xmlChar *name)
и void *xmlHashScanner(void *payload, void *data, xmlChar *name)
в C?
Почему они ведут себя по-другому?разница между void (* xmlHashScanner) и void * xmlHashScanner
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 Я сказал, что они разные, потому что один компилируется, а другой нет. – cheater
'void (* xmlHashScanner)()' является указателем на функцию void. 'void * xmlHashScanner()' - функция, возвращающая указатель void. – Arkadiy