ueach
- это функция, которая перебирает строку Unicode и запускает обратный вызов для каждого символа, передавая ему односимвольную строку.
string ueach(string s, void *function(string)) {
unsigned long i;
for (i = 0; i < s.length; i++)
function(uchar(s, i));
}
Если у меня есть обратный вызов testing
:
void testing(string c) {
puts(utoc(c));
}
, который печатает данный символ (utoc
преобразует строку Unicode в UTF-8 char *
), все работает нормально.Используемый код:
string a = ctou("Hello, world!");
ueach(a, &testing);
Однако я получаю это предупреждение:
test.c: In function ‘main’:
test.c:8: warning: passing argument 2 of ‘ueach’ from incompatible pointer type
ulib:171: note: expected ‘void * (*)(struct string)’ but argument is of type ‘void (*)(struct string)’
Если я поставлю скобки вокруг функциональной части прототипа ueach
, как показано ниже:
string ueach(string s, void (*function)(string)) { ... }
, тогда он работает просто отлично, без предупреждения.
В чем разница между void * (*)(struct string)
и void (*)(struct string)
?
В чем разница между void *function(string)
и void (*function)(string)
?