我现在有一段代码正在使用函数指针作为回调。我遇到了gcc中的一个错误,该错误指出“为参数'type name'指定了存储类”。代码的相关部分是:
error_t addCommand(uint8_t command, void (*callback)(uint16_t,uint8_t)){
这实际上是在TinyOS上使用nesC语言,但这似乎是一个C问题。在我对这个问题的研究中,我发现建议主要来自以下两个问题之一:
标题中有错误(缺少分号)
传递带有静态或易失性值的函数指针(即
void (*callback)(volatile int, uint8_t)
据我所知,我已经排除了问题1。如果
uint16_t
或uint8_t
是静态的volatile(我对这些类型没有太多经验),那么问题2就是一个问题。对于如何解决这个问题的任何提示/答案,我们都非常感激。另外,如果有人熟悉nesC,那么确切的代码看起来更像这样:
command error_t CommandEngine.addCommand(uint8_t command,
void (*callback)(uint16_t,uint8_t)) {
nesC添加到C语言中的内容可能会导致此错误,但我不认为是这种情况。
编辑:从某种意义上说,是nesC。原来我是个白痴,在nesC使用命令并在编译前转换成C代码块时,我用命令作为变量名。感谢大家把它转换成C代码的想法,因为这让我意识到了这个问题。我真的应该想到这个。
最佳答案
对于函数指针使用typedef通常是很好的。它可能会解决你的问题,而且一定会更容易阅读:
typedef void (*callback_t)(uint16_t,uint8_t);
error_t addCommand(uint8_t command, callback_t callback)){
如果它不能解决问题,它至少会缩小范围-你会看到问题是typedef还是函数。
你还应该弄清楚是nesC(我对它一无所知)还是C。试着删除nesC特定的部分并用gcc编译,看看会发生什么。
关于c - 为参数"typename"指定的C函数指针错误存储类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10595013/