没有合适的资源?快使用搜索试试~ 我知道了~
首页优化编码:MirandaIM源码检查与避免常见错误
优化编码:MirandaIM源码检查与避免常见错误
0 下载量 169 浏览量
更新于2024-07-15
收藏 184KB PDF 举报
"本文主要探讨如何在编码过程中减少错误,以提高软件质量。作者通过深入研究广受欢迎的即时聊天工具MirandaIM的源代码,该代码库包含约95万行C和C++代码,指出大型项目中常会出现错误和错别字。文章分享了作者使用PVS-Studio 4.14静态代码分析器进行检查的经验,并强调了避免使用 memset、memcpy、ZeroMemory等低级内存管理函数的重要性。 作者建议开发者尽量避免这些函数,除非在处理大规模数据数组或追求性能优化的特定情况下。对于像MirandaIM这类项目,由于其不涉及复杂的资源密集型算法和大型数据结构,这些低级函数的使用实际上可能导致难以察觉的内存问题。作者举例说明,虽然短期看使用这些函数可以简化代码,但长期来看,这可能会增加调试和维护的复杂性。 文中还提到,尽管MirandaIM项目采用Visual Studio构建,支持3级警告设置,但代码注释占据了20%的比例,提示开发者在编写注释时要保持平衡,确保代码清晰且易于理解。本文旨在提供实用的指导,帮助开发者在编码阶段就避免潜在的错误,提升软件质量。后续章节可能会进一步讨论其他避免错误的方法和最佳实践,读者可以通过链接获取完整的内容。"
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/15558384/bg4.jpg)
Visual C++ 编译器生成了“warning C4018:'<' : signed/unsigned mismatch”警告。这个警告正是在 Miranda IM 采用的 3
级警告中所启用的警告。此时,程序员基本上不会注意到这个片段。他使用了显式类型转换来禁止显示该警告。但
是,错误并没有因此而消失,只是隐藏了起来。正确的代码如下:
if ((INT_PTR)wParam>=0 && (INT_PTR)wParam<nFramescount)
鉴于上述原因,我要提醒大家在遇到相同情况时务必保持警惕。我计算了一下,Miranda IM 中由于带符号/无符号类型
混淆不清而导致条件始终正确或始终错误的缺陷有 33 个。
我们接着看下一个示例,我个人非常喜欢这个例子,而且注释很出色。
void Append( PCXSTR pszSrc, int nLength )
{
...
UINT nOldLength = GetLength();
if (nOldLength < 0)
{
// protects from underflow
nOldLength = 0;
}
...
}
我认为已经没有必要再进一步解释这个代码存在的问题。
当然,程序中出现错误并非都是程序员的责任。有些时候,库开发人员会给我们带来很大的麻烦(在该示例中是
WinAPI 开发人员)。
#define SRMSGSET_LIMITNAMESLEN_MIN 0
static INT_PTR CALLBACK DlgProcTabsOptions(...)
{
...
limitLength =
GetDlgItemInt(hwndDlg, IDC_LIMITNAMESLEN, NULL, TRUE) >=
SRMSGSET_LIMITNAMESLEN_MIN ?
GetDlgItemInt(hwndDlg, IDC_LIMITNAMESLEN, NULL, TRUE) :
SRMSGSET_LIMITNAMESLEN_MIN;
...
}
如果忽略表达式特别复杂这个现象,代码看上去没有问题。顺便提一句,原始示例只有一个代码行。为了看起来更清
晰,我将它分为了几行。不过,编辑问题并不是我们的讨论重点。
这段代码真正的问题是,GetDlgItemInt() 函数不会像程序员所预期的那样返回“int”,而是返回 UINT。以下为函数
在“WinUser.h”文件中的原型:
WINUSERAPI
UINT
WINAPI
GetDlgItemInt(
剩余19页未读,继续阅读
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
weixin_38633475
- 粉丝: 3
- 资源: 946
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- Hadoop生态系统与MapReduce详解
- MDS系列三相整流桥模块技术规格与特性
- MFC编程:指针与句柄获取全面解析
- LM06:多模4G高速数据模块,支持GSM至TD-LTE
- 使用Gradle与Nexus构建私有仓库
- JAVA编程规范指南:命名规则与文件样式
- EMC VNX5500 存储系统日常维护指南
- 大数据驱动的互联网用户体验深度管理策略
- 改进型Booth算法:32位浮点阵列乘法器的高速设计与算法比较
- H3CNE网络认证重点知识整理
- Linux环境下MongoDB的详细安装教程
- 压缩文法的等价变换与多余规则删除
- BRMS入门指南:JBOSS安装与基础操作详解
- Win7环境下Android开发环境配置全攻略
- SHT10 C语言程序与LCD1602显示实例及精度校准
- 反垃圾邮件技术:现状与前景
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)