【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

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

  • 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:282430
用户头像
臧秀涛 略懂技术的运营同学。

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

关注

评论

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

Student Management System

David

#架构实战营 极客时间架构训练营

对比学习算法在转转的实践

转转技术团队

人工智能 推荐算法 对比学习

深入浅出Python——Python高级语法之函数

何极光

Python 函数 10月月更

威胁网络安全的主要因素

阿泽🧸

网络安全 10月月更

助力企业高效率办公,华为云桌面必不可少

科技怪授

华为云 桌面云 云桌面

同样是网络加速,企业为何愿意选择华为云CDN?

秃头也爱科技

网络请求:Vue_Axios学习

Studying_swz

Vue 10月月更

从幻想走向科学:人类操纵大脑的条条大路

脑极体

华为云CDN为用户提供专业全面的加速服务

秃头也爱科技

深入浅出Python——Python基础语法全解

何极光

Python 基础 10月月更

2022年元宇宙应用场景发展趋势分析

易观分析

元宇宙

Baklib产品知识库|为什么说客户体验非常重要?

Baklib

IoTDB 的架构、安装启动方法与数据模式 | 小白教程文档(二)

Apache IoTDB

数据库 IoTDB Apache IoTDB

【通知】OBCA考试收费调整公告

OceanBase 数据库

Python在接口测试中的应用

智趣匠

学习方法 “程”风破浪的开发者 Python接口测试

华为云桌面,随时随地助力企业轻松办公

科技怪授

华为云 桌面云 云桌面

分布式事务-消息队列实现分布式事务

zarmnosaj

10月月更

AAX增添新网关,满足全球用户需求

股市老人

Spring Boot「14」MVC 与前端控制器模式

Samson

Java spring 学习笔记 spring-boot 10月月更

限时免费领票|来云栖大会,看OceanBase 4.0最新进展

OceanBase 数据库

DevOps | 如何快速提升团队软件开发成熟度,快速提升研发效能?

laofo

DevOps 研发效能 CMMI 敏捷研发 绩效考核

2022-10-25:在一个 2 * 3 的板上(board)有 5 块砖瓦,用数字 1~5 来表示, 以及一块空缺用 0 来表示。一次 移动 定义为选择 0 与一个相邻的数字(上下左右)进行交换.

福大大架构师每日一题

算法 rust 福大大

【web 开发基础】PHP 快速入门(11)-PHP 运算符之运算符的优先级

迷彩

表达式 10月月更 web开发基础 PHP基础 运算符优先级

C# 关于程序退出问题学习

IC00

C# 学习 程序员 上位机 10月月更

概述Spark主要特点

穿过生命散发芬芳

spark 10月月更

知识分享|To B产品的帮助中心页面制作方法

Baklib

Vue组件入门(十四)依赖注入

Augus

Vue 10月月更

办公无界,看华为云桌面如何助企业上“云”

科技怪授

华为云 桌面云 云桌面

招聘软件哪个最好用?

优秀

招聘系统

数据共享:VueX学习

Studying_swz

Vue 10月月更

Commit之后发生了什么事情

我不吃六安茶

MySQL 事务

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