关于 if 判断程序,逻辑 比较严谨的写法

有程序如下

    if(yaban_State == ON)
    {
      Lcd_DispHZStr(8 * 4, (i) * 24, "投入", (i + 1 == invert) ? 1 : 0);
    }
    else
    {
      Lcd_DispHZStr(8 * 4, (i) * 24, "退出", (i + 1 == invert) ? 1 : 0);
    }
    
    
   if (p->ya_ban ==OFF)
	{
		return;
	}
	else
	{
		if (UIx > p->dingzhi)
		{
			pRTdata->begin_time_Flg = ON;/* 开始计时 */
		}
		else
		{
			pRTdata->begin_time_Flg = OFF;/*停止计时 */
		}

		if (pRTdata->time_count > (uint16_t)(p->yanshi *1000.0f))
		{
			pRTdata->begin_time_Flg =OFF;
			if (UIx > p->dingzhi)
			{
				pRTdata->pro_out_Flg = SET;/**保护输出 */
			}
		}
	}

上面第一段程序关于压板状态的判断, 当 yaban_State != 0N 时,压板状态会显示“退出”, 正常情况来讲,按照第二段程序的逻辑写法,一定会执行如下 return 吗? 答案是不一定!!!

  if (p->ya_ban ==OFF)
	{
		return;
	}

如果因为某种原因导致改变了 yaban_State 压板变量的值,使得其既不等于ON 也不等于OFF,此时呈现的效果就是 压板状态是“退出” 但if (p->ya_ban ==OFF)逻辑不成立,导致执行的是压板投入状态的逻辑。

正确的写法应该是

if(yaban_State == OFF)
{
   Lcd_DispHZStr(8 * 4, (i) * 24, "退出", (i + 1 == invert) ? 1 : 0);
}
else
{
   Lcd_DispHZStr(8 * 4, (i) * 24, "投入", (i + 1 == invert) ? 1 : 0);
}


if (p->ya_ban ==OFF)
{
    return;
}
else
{
    if (UIx > p->dingzhi)
    {
        pRTdata->begin_time_Flg = ON;/* 开始计时 */
    }
    else
    {
        pRTdata->begin_time_Flg = OFF;/*停止计时 */
    }

    if (pRTdata->time_count > (uint16_t)(p->yanshi *1000.0f))
    {
        pRTdata->begin_time_Flg =OFF;
        if (UIx > p->dingzhi)
        {
            pRTdata->pro_out_Flg = SET;/**保护输出 */
        }
    }
}

或者

if(yaban_State == ON)
{
   Lcd_DispHZStr(8 * 4, (i) * 24, "投入", (i + 1 == invert) ? 1 : 0);
}
else
{
   Lcd_DispHZStr(8 * 4, (i) * 24, "退出", (i + 1 == invert) ? 1 : 0);
}


if (p->ya_ban ==ON)
{
    if (UIx > p->dingzhi)
    {
        pRTdata->begin_time_Flg = ON;/* 开始计时 */
    }
    else
    {
        pRTdata->begin_time_Flg = OFF;/*停止计时 */
    }

    if (pRTdata->time_count > (uint16_t)(p->yanshi *1000.0f))
    {
        pRTdata->begin_time_Flg =OFF;
        if (UIx > p->dingzhi)
        {
            pRTdata->pro_out_Flg = SET;/**保护输出 */
        }
    }
}
else
{
    return;
}

以上两种(因为保护功能宁可被无故打开,也不能被无故关掉,所以对于保护来说还是尽量按照第一种)写法, 即使 yaban_State 被意外改变,既不等于ON也不等于OFF,在显示和保护判断上呈现的是一致的逻辑。

总结:显示的if判断顺序,应该和逻辑部分的判断顺序一致。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值