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

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

相关文章

Spring boot整合dubbo+zookeeper的详细过程

《Springboot整合dubbo+zookeeper的详细过程》本文讲解SpringBoot整合Dubbo与Zookeeper实现API、Provider、Consumer模式,包含依赖配置、... 目录Spring boot整合dubbo+zookeeper1.创建父工程2.父工程引入依赖3.创建ap

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

SpringBoot整合liteflow的详细过程

《SpringBoot整合liteflow的详细过程》:本文主要介绍SpringBoot整合liteflow的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...  liteflow 是什么? 能做什么?总之一句话:能帮你规范写代码逻辑 ,编排并解耦业务逻辑,代码

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

MySQL中的InnoDB单表访问过程

《MySQL中的InnoDB单表访问过程》:本文主要介绍MySQL中的InnoDB单表访问过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、访问类型【1】const【2】ref【3】ref_or_null【4】range【5】index【6】

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

Navicat数据表的数据添加,删除及使用sql完成数据的添加过程

《Navicat数据表的数据添加,删除及使用sql完成数据的添加过程》:本文主要介绍Navicat数据表的数据添加,删除及使用sql完成数据的添加过程,具有很好的参考价值,希望对大家有所帮助,如有... 目录Navicat数据表数据添加,删除及使用sql完成数据添加选中操作的表则出现如下界面,查看左下角从左