博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C/C++的注意事项
阅读量:6813 次
发布时间:2019-06-26

本文共 957 字,大约阅读时间需要 3 分钟。

     最近调试C语言程序,出了一些错误,费了很大的力气才找到这些BUG。现在把这些错误记录下来,同时做一些编程上的原则上的约束,希望能达到两个目的:(1)看到类似的情况,能马上定位知道是什么错误。(2)不在犯这种错误。

         将64位整型转换为32位整型,貌似是没什么问题。但是在做多结点间数据通信的时候,这个不注意的细节将导致很严重的错误。例如在发送端使用的是64位的整型,接收端使用32位整型,这样会导致接收端由于接收缓冲区中的数据没有完全被反序列化阻塞。

        还有使用无符号数的时候一定要注意,因为无符号数减去一个比自身还要大的数,容易出现很严重的问题。原理大家都知道,内部是使用补码存的,但是写程序的时候不一定能注意到。

        使用一些底层的库函数时一定要确保传入的数据类型与接口要求的数据类型一致。我就发生过因为使用zlib的compress函数时要求传入unsigned char * 和 unsigned long int *时,我使用了char *和 unsigned int *时出现一些莫名其妙的错误。

       在使用没有接触的技术或者是底层的库函数的时候,一定要写够测试程序,充分的熟悉接口的使用,而不应该直接集成在软件中,否则会出现很严重的问题。

        使用系统调用或者库函数或者第三方软件的函数时,如果有返回值,一定要检查返回值的情况,以判断程序是否正确。可能就是这样一个小小的问题就会导致导弹打偏或者卫星脱轨,或者是火车站售票系统上常显示的”XXXX位置的内存不能为读“之类的致命错误。如果函数可能会抛出异常,一定要捕获异常。在调试阶段,出现这样问题时,一定要使用exit或者abort之类的方法,强制程序在此结束,并打出当前的行号、文件名称,如果有必要的话还有堆栈信息等这些重要的调试信息。这些对于确定程序出错的位置非常有帮助。   

       养成读文档的好习惯,出现问题的很多一部分原因都是没有仔细阅读文档。文档中详细的说明了接口的使用和注意事项,没有注意到这些细节,调试简直就是自作自受。

       还有常做单元测试,确保缩写的部分代码能够正常运行。然后再集成到软件中,否则出现问题的付出的代价要大的多。

本文转自hipercomer 51CTO博客,原文链接:http://blog.51cto.com/hipercomer/861856

转载地址:http://pykzl.baihongyu.com/

你可能感兴趣的文章
记录一次linux线上服务器被黑事件
查看>>
Windows 7 暗藏的管理功能
查看>>
HP服务器 收集的日志
查看>>
是否是适合您的云计算解决方案?
查看>>
我的友情链接
查看>>
Linux 监控工具之Cacti使用详解(三)
查看>>
数据结构(C语言版)第四章:链表
查看>>
python核心编程:学习笔记4--函数和函数式编程
查看>>
CentOS7基于NFS服务的文件共享
查看>>
Linux passwd文件被清空
查看>>
Python OpenCV学习笔记之:图像阈值操作
查看>>
7月第1周中国.COM总量净增5.1万个 美国净减5.3万
查看>>
国内域名商.wang总量TOP10:易名中国跻身上榜
查看>>
5月钓鱼网站简报:共处理钓鱼网站2483个 环比下降
查看>>
10月国内网民上网时间分布:晚上8点出现峰值6.42%
查看>>
Echarts 基本设置 设置图表位置
查看>>
AliOS Things网络适配框架 - SAL
查看>>
Hystrix之外健壮微服务的新选择:Sentinel 发布首个生产版本
查看>>
数组 将一个数组的元素和另一个素组的元素相加,然后赋给第三个数组
查看>>
缓存服务varnish
查看>>