C编译错误警告 warning C294: unreachable code

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) 重新编译,错误警告消失。

以上实例说明,在不明确运算优先级的情况下,应使用符号()明确运算的优先顺序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值