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)
有什麼區別?