ueach
是一个循环访问Unicode字符串并通过向每个字符传递单字符字符串来运行回调的函数。C中的奇函数指针警告
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)
有什么区别?