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

短路运算符一般有:&&、||,其原理是:当有多个表达式时,左边的表达式值可以确定结果时,就不再继续运算右边的表达式的值。
以如下代码为例,本意是先执行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);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_27508477/article/details/108693450
今日推荐