环境监测设备中关于表达式求值顺序导致的异常问题

Posted 瑞奇Ricky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了环境监测设备中关于表达式求值顺序导致的异常问题相关的知识,希望对你有一定的参考价值。

随着物联网技术的发展,资产监测技术也被广泛应用于多个行业,较为常见的是:物流运输行业、仓储行业、车辆追踪行业等。其中环境监测设备就是物联网技术应用在生鲜冷链、大棚种植、药物运输的典型案例。

环境监测设备能够通过温湿度和光照传感器采集设备周围的数据,并通过芯片处理后传递至云端后台,管理者只需要登录云端后台即可了解货物所处的环境。其次环境监测设备还具备定位功能与预警功能,当用户使用环境监测设备在药物运输过程中,用户即可通过云端后台监测运输公司的运输路径、运输速度、药物的实时位置,帮助用户了解运输的动态信息。当设备被强行拆除或电量较低时,系统会自动触发报警,提醒用户及时对环境监测设备的状况进行核实。避免药物运输过程的监测中断。

客户在环境监测设备的实际使用过程中,经常会遇到一些问题,作为开发人员,一方面需要协调同事积极解决问题,同时还可以在日常更新与开发相关的知识,帮助感兴趣的客户更加全方位的认识环境监测设备。
例如本期的主要话题是软件相关的,在环境监测设备中关于表达式求值顺序导致的异常问题。

团队的开发人员提出以下解决方案:

考虑下面一段代码:
char a[]={1,2,3,4,5,6};
char b[10];
int i = 0;
while(i<5)
{
b[i++]=a[i];
printf("%d %d\\n",i-1,b[i-1]);
}
本意想得到的b结果是1,2,3,4,5
实际运行结果可能是2,3,4,5,6
如果将b[i++]=a[i];改为b[i]=a[i++];
实际运行结果可能是0,1,2,3,4
都不是想要的结果,这里因为i的求值顺序是未知的,不能保证i的值。
正确写法:
b[i++]=a[i];改为b[i]=a[i];i++;
或者直接使用for循环。

同样对设备软件开发感兴趣的用户,在遇到类似问题时可参考以上文档。

以上是关于环境监测设备中关于表达式求值顺序导致的异常问题的主要内容,如果未能解决你的问题,请参考以下文章

资产监测设备中关于供电不稳导致MCU重启问题

Java 表达式中子表达式的求值顺序

刁肥宅详解中缀表达式求值问题:C++实现顺序/链栈解决

二元运算符求值顺序问题

《C程序设计语言》笔记 参考手册3

PL真有意思:控制流