#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
问题解决,果然编译通过,
这个错误太隐晦了,而且很难定位,记录下来。以后遇到类似的问题,可以考虑是否由宏定义导致的。
突然想起不久前老板还给我演示过类似的错误,也是由宏定义后多个 ‘;’ 引起的,当时我还不以为然(谁会在宏定义后加个’;'啊? 傻不傻)。。。