你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

不能在结构体中定义getc和putc

[复制链接]
黑皮男 提问时间:2017-7-12 22:23 /
悬赏5ST金币未解决
本帖最后由 黑皮男 于 2017-7-12 22:31 编辑

之前一直用MDK和IAR,在IAR中的代码是没有问题的,但是最近使用gcc来编译就有问题了,不能够使用getc和putc,难道这俩是关键字吗,很奇怪。错误提示如下
捕获.PNG
感觉很奇怪,在自定义结构体中定义了getc和putc,并调用就是编译不过

收藏 评论10 发布时间:2017-7-12 22:23

举报

10个回答
废鱼 回答时间:2017-7-13 08:40:16
楼主,在C库里面是包含这两个定义的。
MrJiu 回答时间:2017-7-13 09:18:04
可以把错误提示直接百度,或者谷歌一下!!!
黑皮男 回答时间:2017-7-13 09:21:38
MrJiu 发表于 2017-7-13 09:18
可以把错误提示直接百度,或者谷歌一下!!!

目前还没找到原因,再查查,库中定义了,但是我这个是结构体成员函数,也受影响,看来是对这个编译器了解的还是太少了
MrJiu 回答时间:2017-7-13 09:30:22
黑皮男 发表于 2017-7-13 09:21
目前还没找到原因,再查查,库中定义了,但是我这个是结构体成员函数,也受影响,看来是对这个编译器了解 ...

我刚刚想了一下,应该是有问题的!!!结构体里面貌似C是不能声明函数的,可以声明函数的是C++支持的!!!IAR和Keil支持C++编译器,gcc貌似是C编译器,g++好像才是C++编译器!!!你可以在结构体里面搞一个函数指针变量!!!这个是支持的!!!
黑皮男 回答时间:2017-7-13 10:39:30
MrJiu 发表于 2017-7-13 09:30
我刚刚想了一下,应该是有问题的!!!结构体里面貌似C是不能声明函数的,可以声明函数的是C++支持的!! ...

我这个就是函数指针,结构体定义如下。目前的解决办法就是换一个名字就能通过,但是就是感觉不爽
struct serial_operation{
    e_err_t (*init)(struct serial_dev *dev);
    int (*putc)(struct serial_dev *dev, char c);
    int (*getc)(struct serial_dev *dev);
};
MrJiu 回答时间:2017-7-13 11:56:58
黑皮男 发表于 2017-7-13 10:39
我这个就是函数指针,结构体定义如下。目前的解决办法就是换一个名字就能通过,但是就是感觉不爽
struct  ...

这样不太科学吧,结构体内部的变量相当于局域内部的啊!!!这我就搞不懂了!!!
黑皮男 回答时间:2017-7-13 12:23:22
安 发表于 2017-7-13 08:40
楼主,在C库里面是包含这两个定义的。

我这个是结构体内部的指针变量,也受影响吗
废鱼 回答时间:2017-7-13 14:31:01
没用过GCC,楼主可以试着改一个其他的名字,如果还是报错,就看一下是不是定义的问题。最好能把你这段结构体发一下看看。
黑皮男 回答时间:2017-7-13 16:24:05
安 发表于 2017-7-13 14:31
没用过GCC,楼主可以试着改一个其他的名字,如果还是报错,就看一下是不是定义的问题。最好能把你这段结构 ...

定义如下,改名字后是不报错的
struct serial_operation{
    e_err_t (*init)(struct serial_dev *dev);
    int (*putc)(struct serial_dev *dev, char c);
    int (*getc)(struct serial_dev *dev);
};
废鱼 回答时间:2017-7-13 16:36:25
楼主,我感觉你写法还是有问题的,我只做讨论,不做结论。
int (*putc)(struct serial_dev *dev, char c);这里如果用的putc的话,应该和putc的定义一样,就不会报错了。

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版