如何避免写代码过程中一些不必要的手误----一点经验跟看法

2024-03-29 20:18

本文主要是介绍如何避免写代码过程中一些不必要的手误----一点经验跟看法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1。 避免内存访问越界

容易导致内存访问越界的函数

memcpy

memset

_itoa, _i64toa, _ui64toa, _itow, _i64tow, _ui64tow   及其 *to*_s 系列函数

 

 

 

memset(ptr1,  , length) memcpy(ptr1, ptr2, length)

length  有时候需要取两个变量的较小值

对于这样的函数调用,要养成一个好的习惯:把min()直接作为函数参数

example1:

int nLen1= GetSomeLength()

int nLen2 = min(x,bufLen);

memcpy(ptr1, ptr2, nLen2)

 

example2:

memcpy(ptr1, ptr2, min(bufLen, GetSomeLenght) )

 

example2 要优于exaple1,这是因为example1容易错误地写成这样的格式:memcpy(ptr1, ptr2, nLen1)

由于变量名都很相似,这种错误不容易发现。

 

 

 

2。 比较操作符的使用

unsigned int x=2;

unsigned int y=3;

 

if(x-y <0 )

{

    do something

}

 

if 语句中的永远都不会执行到。

这是因为两个无符号数相减得到的仍然是无符号数

好的习惯是:

1)当变量可能需要比较大小或者出现负数时,尽量不要用 unsigned int。

2)  把编译器对无符号有符号比较的警告提升为错误。

3)  显式地使用类型转换

 

 

3。尽量多使用ASSERT()宏,尤其是在函数的开始检查参数的正确性。

ASSERT() 宏在Release模式下不生效,所以放心地使用。应该习惯于使用ASSERT().

实际经验指出,ASSERT()宏能极大地帮助发现错误。

对于数组下标一定要使用ASSERT宏检查是否越界。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

这篇关于如何避免写代码过程中一些不必要的手误----一点经验跟看法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/859537

相关文章

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

oracle 11g导入\导出(expdp impdp)之导入过程

《oracle11g导入导出(expdpimpdp)之导入过程》导出需使用SEC.DMP格式,无分号;建立expdir目录(E:/exp)并确保存在;导入在cmd下执行,需sys用户权限;若需修... 目录准备文件导入(impdp)1、建立directory2、导入语句 3、更改密码总结上一个环节,我们讲了

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

Java Kafka消费者实现过程

《JavaKafka消费者实现过程》Kafka消费者通过KafkaConsumer类实现,核心机制包括偏移量管理、消费者组协调、批量拉取消息及多线程处理,手动提交offset确保数据可靠性,自动提交... 目录基础KafkaConsumer类分析关键代码与核心算法2.1 订阅与分区分配2.2 拉取消息2.3

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W