我目前有一段代码,我正在使用函数指针作为回调。gcc指出“为参数`类型名称‘指定的存储类”代码的相关部分是:
error_t addCommand(uint8_t command, void (*callback)(uint16_t,uint8_t)){这实际上是将nesC语言用于TinyOS,但这似乎是一个C问题。在我对这个问题的研究中,我发现大部分建议来自于两个问题中的一个:
头(缺少semicolon)
void (*callback)(volatile int, uint8_t)))中的某些错误
据我所知,我已经排除了问题1。问题2只在uint16_t或uint8_t是静态易失性的情况下才是一个问题(我对这些类型没有多少经验)。任何关于如何解决这个问题的建议/答案都是非常感谢的。
另外,如果有人熟悉nesC,那么确切的代码看起来更像这样:
command error_t CommandEngine.addCommand(uint8_t command,
void (*callback)(uint16_t,uint8_t)) {nesC在C语言中添加的内容可能会导致此错误,但我不认为是这样的。
编辑:从某种程度上说,这是nesC。原来我是个白痴,当命令被nesC使用并在编译前转换成C代码块时,我正在使用命令作为变量名。感谢大家把它转换成C代码的想法,因为这使我意识到了这个问题。我真该想到这个的。
发布于 2012-05-15 06:52:42
通常对函数指针使用类型防御是很好的。它可以解决您的问题,而且肯定会更加可读性:
typedef void (*callback_t)(uint16_t,uint8_t);
error_t addCommand(uint8_t command, callback_t callback)){如果它不能解决这个问题,那么它至少会缩小它的范围--您将看到这个问题是属于the还是函数。
您还应该尝试找出它是nesC (我不知道)还是C。尝试删除nesC特定的部分并与gcc一起编译,然后看看会发生什么。
https://stackoverflow.com/questions/10595013
复制相似问题