Keil中报错:expect a “)“ ....

文章讲述了在C语言编程中,由于预处理器宏定义末尾意外的分号导致编译错误,if语句中的括号提示误导了问题定位。作者强调了检查宏定义细节的重要性,以及此类隐藏错误的普遍性。
摘要由CSDN通过智能技术生成
#define expected_pressure 100000; //100KPa

uint16_t sample_pressure2 = 0;
sample_pressure2 = (uint16_t)(presure_voltage * 100401.61);

uint16_t air_seal_pressure = 0;
air_seal_pressure = sample_pressure2;

if (air_seal_pressure >= expected_pressure)

问题:

在keil中编译程序时,如上的代码块出现报错:expect a “)” …,如下图所示,
在这里插入图片描述

解答:

根据提示,报错是因为‘if’条件语句中缺少一个右括号 ‘)’,但我们可以看到,if后面是有‘)’的,显然问题的根源并不在这。

注意看,

#define expected_pressure 100000;   //100KPa

发现了吗, 宏定义的末尾竟然有个‘;’ !?

而宏定义是在预处理器阶段直接替换文本,所以如果在宏定义中包含分号,那么在宏展开的地方也会有这个分号,这可能导致编译错误。

正确的宏定义应该是:

#define expected_pressure 100000 //100KPa

问题解决,果然编译通过,

这个错误太隐晦了,而且很难定位,记录下来。以后遇到类似的问题,可以考虑是否由宏定义导致的。

突然想起不久前老板还给我演示过类似的错误,也是由宏定义后多个 ‘;’ 引起的,当时我还不以为然(谁会在宏定义后加个’;'啊? 傻不傻)。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值