黑皮男 发表于 2017-7-12 22:23:16

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

本帖最后由 黑皮男 于 2017-7-12 22:31 编辑

之前一直用MDK和IAR,在IAR中的代码是没有问题的,但是最近使用gcc来编译就有问题了,不能够使用getc和putc,难道这俩是关键字吗,很奇怪。错误提示如下

感觉很奇怪,在自定义结构体中定义了getc和putc,并调用就是编译不过

发表于 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...

这样不太科学吧,结构体内部的变量相当于局域内部的啊!!!这我就搞不懂了!!!;P

黑皮男 发表于 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);
};
页: [1] 2
查看完整版本: 不能在结构体中定义getc和putc