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