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

标签 c gcc callback function-pointers nesc

我目前有一段代码正在使用函数指针作为回调。我在 gcc 中遇到错误,指出“为参数‘type name’指定的存储类”代码的相关部分是:

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

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

  1. 标题有问题(缺少分号)
  2. 传递具有静态或可变值的函数指针(即 void (*callback)(volatile int, uint8_t)

据我所知,我已经解决了问题 1。如果 uint16_tuint8_t 是 static 或 volatile(我对这些类型没有太多经验),问题 2 只是一个问题。非常感谢有关如何解决此问题的任何提示/答案。

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

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

可能是 nesC 添加到 C 语言中的内容导致了此错误,但我认为情况并非如此。

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

最佳答案

对函数指针使用 typedef 通常是好的。它可能会解决您的问题,并且肯定会更具可读性:

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

如果它不能解决问题,它至少会缩小问题的范围 - 你会看到问题是出在 typedef 上还是函数上。

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

关于为参数 `type name' 指定的 C 函数指针错误存储类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10595013/

相关文章:

c - 什么时候应该使用 struct node* head=NULL 和 struct node *head=NULL ?

c - 使用 gcc 预处理器制作余弦表

用C语言检查二进制文件中特定位置的位值

C++、回调、对象和最佳实践

c - 如何学习 C 调试和最佳实践

c - 当用户点击 'Enter' 时使用 getchar() 退出循环?

C++类成员回调

ios - 无法在 swift 中获得回调?

c - GMT 时间 自 秒

c++ - 采用 nulltpr_t : function definition does not declare parameters 的构造函数