【发布时间】:2013-09-01 18:31:30
【问题描述】:
我有一个函数,我想将它作为参数传递给另一个函数(我们称之为 funX)。这是 funX 原型:
void funX(const unsigned char *, unsigned char *, size_t, const somestruct *, unsigned char *, const int);
还有我的函数(我们称之为 funY)调用 funX:
unsigned char * funY(unsigned char *in, unsigned char *out, size_t len, unsigned char *i, void *k, int ed, void (*f)(unsigned char *, unsigned char *, size_t, const void *, unsigned char *, const int))
{
f(in, out, len, k, i, ed);
}
但我在编译时有一些警告:
test.c: In function ‘main’:
test.c:70:5: warning: passing argument 7 of ‘funY’ from incompatible pointer type [enabled by default]
test.c:11:17: note: expected ‘void (*)(unsigned char *, unsigned char *, size_t, const void *, unsigned char *, const int)’ but argument is of type ‘void (*)(const unsigned char *, unsigned char *, size_t, const struct somestruct *, unsigned char *, const int)’
【问题讨论】:
-
按照here 的建议使用 typedef 进行签名。这使得声明函数参数更容易。
-
错误信息看起来很清楚,函数指针类型与您要传递的函数不对应。
-
funY声明中的函数指针参数与funX的类型不同。只是第一个区别:funX的第一个参数是const unsigned char *,而函数指针的第一个参数是unsigned char *。
标签: c function-pointers