2021-03-23 编译时出现error: expected identifier before numeric constant

博客讨论了在C/C++编程中遇到的枚举类型与宏定义冲突的问题。当在不同的头文件中定义了相同的枚举值和宏时,编译x.c文件会导致错误。解决方案包括避免使用宏,特别是在C++中利用namespace来隔离作用域,或者调整头文件的包含顺序。此外,也提到了头文件保护可以防止此类问题的发生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在编译的时候出现这个错误,然后去查找对应的代码段,发现是在使用枚举类型的时候报错!

原因: 定义的enum结构体与其它处的宏定义有冲突。

比如

a.h中:

....

 #define TRUE 1

b.h中:

typedef enum
{
    FALSE=0,
    TRUE=1
}bool;

x.c中:

#include "a.h"

#include "b.h"

编译x.c文件会出现上述错误

看字面意思上讲是因为对一个数值常量传递数字,后来在网上一搜,果然是的。因为该枚举类型和宏重名了。当然会报错。
看建议是少用宏,C++中还可以用namespace指定作用域来将其区别开。
有时候头文件上下包含位置调换一下也能解决问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值