最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

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

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

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

关注

评论

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

科创人·神州数码集团CIO沈旸:最佳实践模式正在失灵,开源加速分布式创新

科创人

哈希游戏开发竞猜系统哈希值hash算法

薇電13242772558

哈希算法

移动平台打造新生态 | 助力企业跨业务、一站式、全场景的系统建设

WorkPlus

架构实战营模块七 作业

库尔斯

架构实战营

盘点校招面试 HR 可能会问到的问题

宇宙之一粟

面试 校招 6月月更

【高并发】在高并发环境下该如何构建应用级缓存?

冰河

并发编程 多线程 高并发 异步编程 6月月更

应用流程挖掘,发现潜在RPA可实施的场景,助力银行优化业务流程

易观分析

RPA

OceanBase 成为信通院首批可信开源社区、可信开源项目

OceanBase 数据库

中国信通院 OceanBase 开源

【云服务器】云计算平台的架构是什么样的?

Finovy Cloud

云服务器 GPU服务器

架构实战营模块七作业

天琪实刚亮

@全球开发者|首届云原生边缘计算峰会邀您共话

华为云开发者联盟

云原生 边缘计算 kubeedge

开始使用DOCKER COMPOSE V2

mengzyou

Docker DevOps Docker-compose

直播回顾 | 7000字干货,深析区块链+汽车供应链金融的应用价值

旺链科技

区块链 产业区块链 供应链金融

阿里云刘珅孜:云游戏带来的启发——端上创新

阿里云弹性计算

gpu 元宇宙 云游戏

中国标准走进国际视野,首个零信任国际标准的诞生往事

脑极体

Java27岁了——一次争执引起的Java内卷生涯

写代码两年半

javase Java EE 6月月更

天猫精灵语音技能单轮对话表达式的参数定义

Jerry Wang

人工智能 机器学习 聊天机器人 机器人 6月月更

2022年中国新能源汽车换电市场发展洞察

易观分析

新能源汽车

当AI抄起了水表

华为云开发者联盟

人工智能 modelarts workflow 智能水务

华为云GaussDB首席架构师冯柯:摘取皇冠上的明珠,华为云数据库的创新与探索

华为云开发者联盟

数据库 华为云 GaussDB 国产数据库

Docker的安装及日常命令的使用

Geek_982ff5

6月月更

从零开始搭建vue-cli项目

小恺

6月月更

LabVIEW控制Arduino采集LM35温度传感器数值(基础篇—12)

不脱发的程序猿

单片机 LabVIEW Arduino LIAT 采集LM35温度传感器数值

样品管理系统解决方案

低代码小观

Lims LIMS实验室信息管理系统 LIMS系统

函数节流和函数防抖和他们的区别

工边页字

JavaScript 性能优化 前端 6月月更

动态路由协议之RIP协议,最古老的距离矢量协议!

wljslmz

IP 网络工程师 动态路由 6月月更 路由协议

都有哪些较好用的项目管理软件?

优秀

项目管理 项目管理软件

企业知识管理体系怎么搭建和运营?

小炮

【Spring 学习笔记(一)】第一个Spring程序与IoC思想

倔强的牛角

6月月更

一篇文章带你彻底了解哈希表

武师叔

算法 哈希表 6月月更

王者荣耀商城异地多活架构设计

流火

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