为参数`type name'指定的C函数指针错误存储类

时间:2012-05-15 06:07:50

标签: c gcc callback function-pointers nesc

我目前有一段代码,我正在使用函数指针作为回调。我遇到了gcc错误,指出“为参数`类型名称'指定的存储类”,代码的相关部分是:

error_t addCommand(uint8_t command, void  (*callback)(uint16_t,uint8_t)){

这实际上是为TinyOS使用nesC语言,但它似乎是一个C问题。在我对这个问题的研究中,我发现的建议主要来自两个问题之一:

  1. 标题中有错误(缺少分号)
  2. 传递具有静态或易变值的函数指针(即void (*callback)(volatile int, uint8_t)
  3. 据我所知,我已经消除了问题1。问题2只是uint16_tuint8_t是volatile的静态问题(我对这些类型没有多少经验)。任何有关如何解决此问题的提示/答案都非常感谢。

    此外,如果有人熟悉nesC,确切的代码看起来更像是这样:

    command error_t CommandEngine.addCommand(uint8_t command,
                                             void  (*callback)(uint16_t,uint8_t)) {
    

    有可能nesC添加到C语言会导致此错误,但我不认为是这种情况。

    编辑:在某种程度上它是nesC。事实证明,当nesC使用命令并在编译之前转换为某些C代码块时,我是一个白痴并使用命令作为变量名。感谢大家将其转换为C代码的想法,因为这使我意识到了这个问题。我真的应该想到这一点。

1 个答案:

答案 0 :(得分:0)

将typedef用于函数指针通常很好。它可以解决您的问题,并且肯定会更具可读性:

typedef void (*callback_t)(uint16_t,uint8_t);
error_t addCommand(uint8_t command, callback_t callback)){

如果它不能解决问题,它至少会缩小它 - 你会看到问题是关于typedef还是函数。

您还应该尝试弄清楚它是否是nesC(我对此一无所知)或C.尝试删除nesC特定部分并使用gcc进行编译,看看会发生什么。