2013-09-01 194 views
0

我有一个函数,我想将其作为参数传递给另一个函数(我们称之为funX)。这里的funX原型:将函数指针传递给函数+函数参数

void funX(const unsigned char *, unsigned char *, size_t, const somestruct *, unsigned char *, const int); 

和我的功能(可以称之为讨人喜欢),其中要求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)’ 
+1

的签名使用的typedef的建议[这里] (http://stackoverflow.com/a/9143434/ 841108)。这使得更容易地声明函数参数。 –

+0

错误消息看起来非常清晰,函数指针类型不对应于要传递的函数。 –

+0

“funY”声明中的函数指针参数与“funX”的类型不同。只是第一个区别:第一个参数是'funX',是一个'const unsigned char *',而函数指针的第一个参数是'unsigned char *'。 –

回答

2

你看了整个错误信息?

您有一些const - 和其他类型不匹配(例如指针到struct而不是void *等)在两个函数的签名中。函数类型只有在它们的签名完全匹配时才兼容。

1

您的签名似乎有所不同。见下文。

void funX(const unsigned char *, unsigned char *, size_t, --> const somestruct * <--, unsigned char *, const int); 

void (*f)(unsigned char *, unsigned char *, size_t, --> const void * <--, unsigned char *, const int) 
3

见警告和比较原型

预计: -

void (*)(unsigned char *,  unsigned char *, size_t, const void *,    unsigned char *, const int) 

提供: -

void (*)(const unsigned char *, unsigned char *, size_t, const struct somestruct *, unsigned char *, const int)