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

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

相关文章

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

将Mybatis升级为Mybatis-Plus的详细过程

《将Mybatis升级为Mybatis-Plus的详细过程》本文详细介绍了在若依管理系统(v3.8.8)中将MyBatis升级为MyBatis-Plus的过程,旨在提升开发效率,通过本文,开发者可实现... 目录说明流程增加依赖修改配置文件注释掉MyBATisConfig里面的Bean代码生成使用IDEA生

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

java之Objects.nonNull用法代码解读

《java之Objects.nonNull用法代码解读》:本文主要介绍java之Objects.nonNull用法代码,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Java之Objects.nonwww.chinasem.cnNull用法代码Objects.nonN