使用逻辑或应该注意的短路现象

短路运算符一般有:&&、||,其原理是:当有多个表达式时,左边的表达式值可以确定结果时,就不再继续运算右边的表达式的值。
以如下代码为例,本意是先执行di0_init和di1_init两个函数,再根据其返回值确定是否创建线程操作:

static int di_init()
{
    if (di0_init() == RT_EOK || di1_init() == RT_EOK)   //任意一个通道初始化成功则需要上传数据
    {
        rt_thread_t tid = rt_thread_create("di_up", di_upload_thread_entry, RT_NULL, 4096, 27, 10);
        if (tid != RT_NULL)
            rt_thread_startup(tid);
    }
}

但实际上只执行了di0_init,没执行di1_init。
所以应该进行如下改写:

static int di_init()
{
    rt_err_t ret1, ret2;
    ret1 = di0_init();
    ret2 = di1_init();
    if (ret1 == RT_EOK || ret2 == RT_EOK)   //任意一个通道初始化成功则需要上传数据
    {
        rt_thread_t tid = rt_thread_create("di_up", di_upload_thread_entry, RT_NULL, 4096, 27, 10);
        if (tid != RT_NULL)
            rt_thread_startup(tid);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值