不能在结构体中定义getc和putc
本帖最后由 黑皮男 于 2017-7-12 22:31 编辑之前一直用MDK和IAR,在IAR中的代码是没有问题的,但是最近使用gcc来编译就有问题了,不能够使用getc和putc,难道这俩是关键字吗,很奇怪。错误提示如下
感觉很奇怪,在自定义结构体中定义了getc和putc,并调用就是编译不过
楼主,在C库里面是包含这两个定义的。 可以把错误提示直接百度,或者谷歌一下!!! MrJiu 发表于 2017-7-13 09:18
可以把错误提示直接百度,或者谷歌一下!!!
目前还没找到原因,再查查,库中定义了,但是我这个是结构体成员函数,也受影响,看来是对这个编译器了解的还是太少了 黑皮男 发表于 2017-7-13 09:21
目前还没找到原因,再查查,库中定义了,但是我这个是结构体成员函数,也受影响,看来是对这个编译器了解 ...
我刚刚想了一下,应该是有问题的!!!结构体里面貌似C是不能声明函数的,可以声明函数的是C++支持的!!!IAR和Keil支持C++编译器,gcc貌似是C编译器,g++好像才是C++编译器!!!你可以在结构体里面搞一个函数指针变量!!!这个是支持的!!! 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);
}; 黑皮男 发表于 2017-7-13 10:39
我这个就是函数指针,结构体定义如下。目前的解决办法就是换一个名字就能通过,但是就是感觉不爽
struct...
这样不太科学吧,结构体内部的变量相当于局域内部的啊!!!这我就搞不懂了!!!;P 安 发表于 2017-7-13 08:40
楼主,在C库里面是包含这两个定义的。
我这个是结构体内部的指针变量,也受影响吗 没用过GCC,楼主可以试着改一个其他的名字,如果还是报错,就看一下是不是定义的问题。最好能把你这段结构体发一下看看。 安 发表于 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