QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

一份编程错误列表强调静态代码分析有其必要性

  • 2012-12-19
  • 本文字数:761 字

    阅读完需:约 2 分钟

Program Verification Systems 公司(针对 C 和 C++ 的静态代码分析工具 PVS-Studio 就是该公司的产品)发布了一份编程错误列表,有些错误是从Chromium、TortoiseSVN、Apache HTTP Server 和MySQL 等流行的开源项目中发现的。

这份列表维护的编码错误有150 多类,有的是严重的逻辑错误,有的是性能相关的问题,还有一些危害并不是很大。

下面是选自该列表的一些错误类型,示例代码都来自真实项目。

V502 ——或许‘?:’运算符的工作方式和想象中并不相同。该运算符的优先级比很多运算符都要低。

MongoDB:

复制代码
string sysInfo() {
....
stringstream ss;
....
ss << (sizeof(char *) == 8) ? " 64bit" : " 32bit";
....
}

这是一个很好的例子。这段代码打印的是 0 或 1,而非“32bit”或“64bit”。

V511 ——在如下表达式中,sizeof 运算符返回的是指针的大小,而非数组的大小。

Chromium:

复制代码
uint8 salt_[LINK_SALT_LENGTH];
VisitedLinkMaster::TableBuilder::TableBuilder(
VisitedLinkMaster* master,
const uint8 salt[LINK_SALT_LENGTH])
: master_(master),
success_(true) {
fingerprints_.reserve(4096);
memcpy(salt_, salt, sizeof(salt));
}

“salt”对象就是一个指针。方括号中的值 LINK_SALT_LENGTH 向程序员表明,他们正在使用的是一个包含 LINK_SALT_LENGTH 个元素的数组。但传递给函数的并不是数组——只是个指针。因此,表达式 sizeof(salt) 返回的值是 4 或 8(32 位或者 64 位系统上指针的大小)。

到目前为止,这个列表上列出的、出现于各种开源项目的错误,很多可能已经修复。因为任何程序员都难免出错,所以使用一个或多个静态代码分析工具处理一下源代码是个不错的建议。Wikipedia 上有一个页面,列出了很多针对不同语言的静态代码分析工具。

参考英文原文 An Errors List Underscores the Need for Static Code Analysis

2012-12-19 08:282627
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 139.4 次阅读, 收获喜欢 35 次。

关注

评论

发布
暂无评论
发现更多内容

低代码适用于哪些应用开发场景

力软低代码开发平台

APICloud AVM 封装验证码输入框组件

YonBuilder低代码开发平台

程序员 前端开发 低代码开发 多端开发

低代码是什么意思?低代码平台的技术特点是什么?

优秀

低代码

干货 | 实战演练基于加密接口测试测试用例设计

霍格沃兹测试开发学社

干货 | Pytest 结合 Allure 生成测试报告

霍格沃兹测试开发学社

「海格通信」化繁为简!云管升级助力海格通信创新之路提速

嘉为蓝鲸

云管理

AAX影响力实验室探究加密产业对各行业的影响

股市老人

实战演示 H5 性能分析

霍格沃兹测试开发学社

长安链源码分析启动(1)

长安链

他只是试图运用自己的能力,给这个领域带来改变

图灵社区

通信 科学史

Python条件语句怎么用

和牛

Python 8月月更

长安链源码分析启动(3)

长安链

99 大促来袭,利用 MSE 服务自治体系为业务保驾护航

阿里巴巴云原生

阿里云 微服务 云原生

区块链商用案例:网间结算联盟链建设实战

鲸品堂

区块链 运营商 企业号九月金秋榜

阿里云金融创新峰会云原生分论坛圆满举办,加速金融行业落地云原生

阿里巴巴云原生

阿里云 云原生 金融行业

APICloud 可视化编程 - 拖拉拽实现专业级源码

YonBuilder低代码开发平台

低代码开发 多端开发 可视化开发

CI 可观测性使变更管理发挥作用|Foresight

观测云

[JS入门到进阶] 手写解析URL参数的工具,并部署。用起来又快又爽!

HullQin

CSS JavaScript html 前端 8月月更

长安链源码分析启动(2)

长安链

2022年Q2银行APP活跃用户规模盘点:头部银行增长稳定

易观分析

金融 银行 用户规模

C/C++普通函数与函数模板的区别,调用规则,模板局限性

CtrlX

c c++ C# 8月月更

Nft数字藏品app开发,开发数字藏品系统

开源直播系统源码

数字藏品 数字藏品软件开发 数字藏品开发 数字藏品系统

Dubbo 3.1.0 正式发布,数据面原生接入 Service Mesh

阿里巴巴云原生

阿里云 云原生 dubbo

这些并发容器的坑,你要谨记

华为云开发者联盟

后端 开发

聚四方之力,合四方之需:智能云网的持续进化

脑极体

【DBA100人】李建明:一名普通DBA的14年技术之路与成长智慧

OceanBase 数据库

即时通讯安全篇(十一):IM聊天系统安全手段之传输内容端到端加密技术

JackJiang

网络安全 网络编程 即时通讯 IM openssl

SQL改写系列九:外连接转内连接的常见场景与错误-2

OceanBase 数据库

9月17日 杭州站 | Serverless Developer Meetup 开启报名

阿里巴巴云原生

阿里云 Serverless 云原生

基于龙蜥操作系统指令加速,降低云原生网关的构建成本

阿里巴巴云原生

阿里云 云原生 云原生网关 龙蜥

开源一夏 | 一场由serialVersionUID 引发的线上问题

六月的雨在InfoQ

开源 serialVersionUID transient Serializable接口 8月月更

一份编程错误列表强调静态代码分析有其必要性_语言 & 开发_Abel Avram_InfoQ精选文章