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

不能在结构体中定义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);
};
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版