【问题标题】:Passing function pointer to a function + function arguments将函数指针传递给函数+函数参数
【发布时间】: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


【解决方案1】:

查看警告并比较原型

预期:-

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)

【讨论】:

    【解决方案2】:

    您是否阅读了整个错误消息?

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

    【讨论】:

      【解决方案3】:

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

      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)
      

      【讨论】:

        猜你喜欢
        • 2016-11-07
        • 1970-01-01
        • 2018-08-25
        • 1970-01-01
        • 2019-08-17
        • 2012-11-26
        • 2021-07-18
        • 1970-01-01
        相关资源
        最近更新 更多