环境监测设备软件优化--C代码中隐藏的数值比较陷阱

Posted 瑞奇Ricky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了环境监测设备软件优化--C代码中隐藏的数值比较陷阱相关的知识,希望对你有一定的参考价值。

环境监测设备开发过程中无论是硬件问题还是软件问题都会影响设备的正常运转。笔者近期在与团队讨论如何优化环境监测设备的体验感过程中,团队的工作人员提出了C语音中代码基础的重要性。对于C代码过程中遇到的问题需要定期进行整理,为后期的工作积累经验达到提升工作效率的目的。

环境监测设备主要是以无线传感技术为基础,利用温湿度传感器采集货物所处的环境,再通过通信模块和网络进行数据传输,使得云端后台能够同步接收相关信息。环境监测设备的云端不仅支持手机端和电脑端,而且管理人员可以通过增设账户的方式,添加更多工作人员监测云端后台,提高企业的运行效率。

环境监测设备的功能优化离不开软件方面的深入理解,其中关于基础问题之一:C代码中隐藏的数值比较陷阱。

考虑下面一段代码:
int arr[]={1,2,3,4,5};
int i = -1;
#define ARR_SIZE (sizeof(arr)/sizeof(arr[0]))
if(i < ARR_SIZE)
{
printf(“i < ARR_SIZE\\r\\n”);
}else{
printf(“i >= ARR_SIZE\\r\\n”);
}
实际输出并不是i < ARR_SIZE而是是i >= ARR_SIZE。
原因分析:
#define ARR_SIZE (sizeof(arr)/sizeof(arr[0]))这是编码时我们经常使用到数组大小的计算方法
但是很容易忽略sizeof返回的是无符号类型,所以使用有符号类型比较时i会默认强制为无符号类型,
-1就会变成一个很大的数导致出现不期望的结果。

解决方案:
将if(i < ARR_SIZE)改为if(i < (int)ARR_SIZE)或者在数组长度比较时使用无符号的i变量。

环境监测设备的主要应用范围包括了:药物运输、生鲜冷链运输等,同时对于货物的存储环境监测也发挥了重要的作用。未来随着无线通信技术与传感技术的不断完善,相关设备的应用范围会不断扩展,为行业的发展提供更多便利。

以上是关于环境监测设备软件优化--C代码中隐藏的数值比较陷阱的主要内容,如果未能解决你的问题,请参考以下文章

资产监测设备C代码中比较符‘==‘容易误写为‘=‘编译器却不报错的建议

JS变量比较陷阱

c语言,double类型数值比较为啥出错,如何比较两个double类型大小?

干货人生篇过早优化的陷阱!

读书笔记--C陷阱与缺陷

环境监测设备中OPT3001获取光照数值驱动代码问题解决方案