GD32中编译报错: error: #65: expected a “;“ typedef enum {FALSE = 0, TRUE = !FALSE} bool;问题解决

GD32中关于bool编译报错: error: #65: expected a ";" typedef enum {FALSE = 0, TRUE = !FALSE} bool;的解决方法

前言

调试的芯片是GD32F20X系列,编译的时候报错error: #65: expected a “;” typedef enum {FALSE = 0, TRUE = !FALSE} bool;仔细检查代码结构体没有缺少大括号或者分号,所以不是代码敲错的问题,可能是bool变量定义的问题。

问题排查和解决

bool变量报错一般检查两个地方,一是添加了#include"stdbool.h"头文件的地方,二是定义了枚举typedef enum {FALSE = 0, TRUE = !FALSE} bool;的地方。GD32在其头文件gd32f20x.h中定义了枚举类型,我在其他地方也使用了stdbool.h头文件,该头文件中对bool也做了定义,如下:

/* enum definitions */
typedef enum {DISABLE = 0, ENABLE = !DISABLE} EventStatus, ControlStatus;
typedef enum {FALSE = 0, TRUE = !FALSE} bool;
typedef enum {RESET = 0, SET = !RESET} FlagStatus;
typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrStatus;
#ifndef __cplusplus /* In C++, 'bool', 'true' and 'false' and keywords */
    #define bool _Bool
    #define true 1
    #define false 0

一开始我注释掉了gd32f20x.h中bool枚举的定义,确实不会再报错,如下:

/* enum definitions */
typedef enum {DISABLE = 0, ENABLE = !DISABLE} EventStatus, ControlStatus;
//typedef enum {FALSE = 0, TRUE = !FALSE} bool;
typedef enum {RESET = 0, SET = !RESET} FlagStatus;
typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrStatus;

但是之前调过的同类程序不会报这个错误,而且gd32f20x.h中的语句一般不会动。后来我想到了,可能是include顺序的问题,我开始调整stdbool.h的位置,最初该头文件的位置如下:
在这里插入图片描述
在这里插入图片描述

我在com_pro.h中包含了gd32f20x.h,这样stdbool.h就在它之前。我调整了以下顺序,如下:
在这里插入图片描述
此时不会再报标题中描述的错误了。

总结

因此,在保证语法没有问题的前提下,这个报错一般是stdbool.h头文件放在了gd32f20x.h头文件的前面,调整下二者的顺序即可。当然也会存在重定义的问题,不过开发者都会使用如下语句避免重定义:

#ifndef _DEMO_H
#define _DEMO_H
//宏定义
//typedef
//全局变量声明
//外部函数声明
#endif

这样重定义出问题的概率小很多,反而inlcude顺序的问题容易被疏忽。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值