C程序在编译时出现以下错误警告:
… warning C294: unreachable code
意思是该段代码无法到达。
请看以下源代码:
//端口监测
void Port_Det()
{
switch (Port_Sta)
{
case 0:
break;
case 1:
if (P1 & 0x10 == 0)//P14=0
{
DelayMs(50);
if (P1 & 0x10 == 0) Commu_Sta = 1;
}
else if (P1 & 0x40 == 0)
{
DelayMs(50);
if (P1 & 0x40 == 0) Commu_Sta = 2;
}
break;
case 2:
if (P1 & 0x10 == 1)//P14=1
{
DelayMs(50);
if (P1 & 0x10 == 1)
{
P1 &= 0xDF;//P15=0
Commu_Sta = 0;
Port_Sta = 1;//返回端口监测
}
}
break;
}
}
编译时报错:
compiling main.c…
main.c(89): warning C294: unreachable code
main.c(94): warning C294: unreachable code
main.c(102): warning C294: unreachable code
分析原因:检查延时代码,没有发现问题;注意到该段代码前面的if语句:if (P1 & 0x10 == 0) ,怀疑运算优先级问题导致条件语句无法满足后继代码运行条件,查看位与运算 & 和逻辑运算 == 的优先级,发现逻辑运算 == 的优先级高于位与运算 &; 而显然 0x10 == 0 这个条件是不成立的,因此导致后继代码无法到达。修改该条件语句为 if ((P1 & 0x10) == 0) 重新编译,错误警告消失。
以上实例说明,在不明确运算优先级的情况下,应使用符号()明确运算的优先顺序。