大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

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

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

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

关注

评论

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

【小白学YOLO】一文带你学YOLOv1 Testing

华为云开发者联盟

人工智能 算法 图像识别 什么是多线程

Python好找工作吗?

cdhqyj

字节跳动李本超:一年成为 Committer,我与 Flink 社区的故事

Apache Flink

flink

[POJ 1001] Exponentiation JAVA解题报告

一直AC一直爽

算法 刷题 POJ ACM

存储性能加速引擎之预读

焱融科技

Linux sds 焱融科技 分布式存储 预读

多线程为了同个资源打起架来了,该如何让他们安定?

小林coding

并发编程 多线程 操作系统 计算机基础

你的个人博客网站该上线了!

北漂码农有话说

架构师是怎样炼成的 7-1 性能测试与优化

闷骚程序员

[POJ 1000] A+B Problem 经典水题 JAVA解题报告

一直AC一直爽

POJ OJ ACM 水题

【源码系列】Spring Cloud Gateway

Alex🐒

源码 SpringCloud Gateway

数据分析师 ”痛“ 谁能了解

金松(李博源)

数据分析 产品经理 数据产品 数据模型

Fastjson到了说再见的时候了

YourBatman

Jackson Fastjson JSON库

提速数字化!区块链加速应用落地,新制造与服务不断推出

CECBC

三分钟热度的干劲

落曦

第七周总结

andy

极客大学

kubernetes 集群升级,备份,故障恢复(kubeadm)

小小文

Kubernetes 群集安装 故障 kubeadm

面向进化的软件架构

星际行者

软件架构 进化

一个简单的物联网设备接入网关高可用方案

凸出

Java nginx Netty

第七周作业

andy

极客大学

JAVA算法

Bruce Duan

排序算法 Java算法

常见的emit实现AOP demo

八苦-瞿昙

随笔 随笔杂谈 aop

密码学的随机性与区块链随机数

CECBC

程序员开启社交和打造影响力的最佳方式

非著名程序员

程序员 提升认知 写作 社交

饿了么4年 + 阿里2年:研发路上的一些总结与思考

程序员生活志

阿里 饿了么 经验总结

BIGO | Likee深度推荐模型的特征工程优化

DT极客

LeetCode 题解:122. 买卖股票的最佳时机 II,JavaScript,一遍循环,详细注释

Lee Chen

大前端

天府之国迎来数字经济发展高地新契机

CECBC

数字货币 区块链技术 应用落地 人才政策产业

阿里云高级技术专家李晓成:面向5G的云网一体及云原生应用实践

阿里云Edge Plus

又被逼着优化代码,这次我干掉了出入参 Log日志

程序员小富

Java

架构师训练营」第 7 周作业

edd

极客大学架构师训练营

【API进阶之路】因为不会创建云服务器,我被实习生摆了一道

华为云开发者联盟

虚拟机 服务器 API 华为云 API接口管理

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