首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C函数指针为参数“类型名称”指定的错误存储类

C函数指针为参数“类型名称”指定的错误存储类
EN

Stack Overflow用户
提问于 2012-05-15 06:07:50
回答 1查看 5.5K关注 0票数 1

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

代码语言:javascript
复制
error_t addCommand(uint8_t command, void  (*callback)(uint16_t,uint8_t)){

这实际上是将nesC语言用于TinyOS,但这似乎是一个C问题。在我对这个问题的研究中,我发现大部分建议来自于两个问题中的一个:

头(缺少semicolon)

  • Passing,一个带有静态或易失性值的函数指针(即void (*callback)(volatile int, uint8_t)

))中的某些错误

据我所知,我已经排除了问题1。问题2只在uint16_tuint8_t是静态易失性的情况下才是一个问题(我对这些类型没有多少经验)。任何关于如何解决这个问题的建议/答案都是非常感谢的。

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

代码语言:javascript
复制
command error_t CommandEngine.addCommand(uint8_t command,
                                         void  (*callback)(uint16_t,uint8_t)) {

nesC在C语言中添加的内容可能会导致此错误,但我不认为是这样的。

编辑:从某种程度上说,这是nesC。原来我是个白痴,当命令被nesC使用并在编译前转换成C代码块时,我正在使用命令作为变量名。感谢大家把它转换成C代码的想法,因为这使我意识到了这个问题。我真该想到这个的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-15 06:52:42

通常对函数指针使用类型防御是很好的。它可以解决您的问题,而且肯定会更加可读性:

代码语言:javascript
复制
typedef void (*callback_t)(uint16_t,uint8_t);
error_t addCommand(uint8_t command, callback_t callback)){

如果它不能解决这个问题,那么它至少会缩小它的范围--您将看到这个问题是属于the还是函数。

您还应该尝试找出它是nesC (我不知道)还是C。尝试删除nesC特定的部分并与gcc一起编译,然后看看会发生什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10595013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档