调试技巧(2)

6. 如何写出好(易于调试)的代码
6.1 优秀的代码:
- 代码运行正常
- bug很少
- 效率高
- 可读性高
- 可维护性高
- 注释清晰
- 文档齐全
常见的coding技巧:
- 使用assert
- 尽量使用const
- 养成良好的编码风格
- 添加必要的注释
- 避免编码的陷阱。
这里讲一下assert 和const的作用
assert相当于断言,是一种暴力解办法的一个好东西,assert括号里的东西如果不满足条件的话,他就会报错,这样就很好的阻止一些错误的发生,当然我们在使用的时候一定要包含他的头文件<assert.h>.
const
const修饰指针变量的时候:
- const如果放在*的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改
变。但是指针变量本身的内容可变。 - const如果放在*的右边,修饰的是指针变量本身,保证了指针变量的内容不能修改,但是指
针指向的内容,可以通过指针改变。
简单概括就是左定值,右定向。
下面讲个例子让我们看一下怎么写出好的代码
模拟实现strcpy函数
#include<string.h>
#include<stdio.h>
#include<assert.h>
char* my_strcpy(char* dest, const char* src)
{assert(dest && src);char* ret = dest;assert(dest && src);while (*dest++ = *src++){;}return ret;
}
int main()
{char arr[] = "xxxxxxxxxxx";char arr2[] = "abcd";char* ret = my_strcpy(arr, arr2);printf("%s", ret);return 0;
}
7. 编程常见的错误
7.1 编译型错误
直接看错误提示信息(双击),解决问题。或者凭借经验就可以搞定。相对来说简单。
7.2 链接型错误
看错误提示信息,主要在代码中找到错误信息中的标识符,然后定位问题所在。一般是标识符名不
存在或者拼写错误。
7.3 运行时错误
借助调试,逐步定位问题。
今天的分享就到这里,谢谢大家!!!!
相关文章:
调试技巧(2)
6. 如何写出好(易于调试)的代码 6.1 优秀的代码: 代码运行正常bug很少效率高可读性高可维护性高注释清晰文档齐全 常见的coding技巧: 使用assert尽量使用const养成良好的编码风格添加必要的注释避免编码的陷阱。 这里讲一下assert…...
骨传导耳机真不伤耳吗?骨传导耳机有什么好处?
骨传导耳机真不伤耳吗?骨传导耳机有什么好处? 我先来说说骨传导耳机的工作原理吧,骨传导是一种传声方式,声波通过颅骨、颌骨等头部骨头的振动,将声音传到内耳。其实骨传导的现象我们很常见,就像我们平时嗑瓜…...
mac切换jdk版本
查询mac已有版本 1、打开终端,输入: /usr/libexec/java_home -V注意:输入命令参数区分大小写(必须是-V) 2.目前本地装有两个版本的jdk xxxxedydeMacBook-Pro-9 ~ % /usr/libexec/java_home -V Matching Java Virtual Machines (2):20.0.1 (…...
go 基本语法(简单案例)
!注: go中 对变量申明很是严格,申明了,在没有使用的情况下,也会产生编译错误 1.行分隔符 一行就是代码,无;分割,如果需要在一行展示,需要以;分割,…...
Permute 3 for mac音视频格式转换
Permute是一款Mac平台上的媒体格式转换软件,由Chaotic Software开发。它可以帮助用户快速地将各种音频、视频和图像文件转换成所需格式,并提供了一些常用工具以便于用户进行编辑和处理。 Permute的主要特点包括: - 支持大量格式:支…...
线程概念linux
何为线程: 线程是程序中负责执行的单位,它可以被看作是进程的一部分,是进程的子任务。线程与进程的区别在于,进程是一个资源单位,而线程是进程的一部分,它只有栈这个独立的资源,其他资源如代码…...
【Yolov5+Deepsort】训练自己的数据集(1)| 目标检测追踪 | 轨迹绘制
📢前言:本篇是关于如何使用YoloV5Deepsort训练自己的数据集,从而实现目标检测与目标追踪,并绘制出物体的运动轨迹。本章讲解的为第一个内容:简单介绍YoloV5Deepsort中所用到的目标检测,追踪及sort&Depp…...
express学习笔记4 - 热更新以及express-boom
我们每次改动代码的时候都要重启项目,现在我们给项目添加一个热更新 npm install --save-dev nodemon # or using yarn: yarn add nodemon -D 在package.json添加一行代码 "dev": "nodemon ./bin/www" 重启项目 然后随便做改动ÿ…...
Ajax_02学习笔记(源码 + 图书管理业务 + 以及 个人信息修改功能)
Ajax_02 01_Bootstrap框架-控制弹框的使用 代码 <!-- 引入bootstrap.css --> <link href"https://cdn.jsdelivr.net/npm/bootstrap5.2.2/dist/css/bootstrap.min.css" rel"stylesheet"><button type"button" class"btn btn…...
Python-数据类型转换
当涉及数据类型转换时,Python提供了多种内置函数来执行不同类型之间的转换 以下是每个方法的详细说明和示例案例 整数和浮点数转换: int(x, base10): 将给定的参数x转换为整数。x可以是一个整数、浮点数或字符串。如果x是字符串,则可以提供…...
DASCTF 2023 0X401七月暑期挑战赛 Web方向 EzFlask ez_cms MyPicDisk 详细题解wp
EzFlask 源码直接给了 CtrlU查看带缩进的源码 import uuidfrom flask import Flask, request, session # 导入黑名单列表 from secret import black_list import jsonapp Flask(__name__) # 为 Flask 应用设置一个随机的 secret_key app.secret_key str(uuid.uuid4())# 检查…...
数据结构-链表
🗡CSDN主页:d1ff1cult.🗡 🗡代码云仓库:d1ff1cult.🗡 🗡文章栏目:数据结构专栏🗡 目录 目录 代码总览: 接口slist.h: slist.c: 1.什么是链表 1.1链…...
大数据Flink(五十五):Flink架构体系
文章目录 Flink架构体系 一、 Flink中的重要角色 二、Flink数据流编程模型 三、Libraries支持...
使用矢量数据库打造全新的搜索引擎
在技术层面上,矢量数据库采用了一种名为“矢量索引”的技术,这是一种组织和搜索矢量数据的方法,可以快速找到相似矢量。其中关键的一环是“距离函数”的概念,它可以衡量两个矢量的相似程度。 1.矢量数据库简介 矢量数据库是专门…...
算法提高-树状数组
算法提高-树状数组 241. 楼兰图腾(区间求和 单点修改)242. 一个简单的整数问题(差分推公式 实现 维护区间修改单点求和)243. 一个简单的整数问题2(区间修改和区间求和)AcWing 244. 谜一样的牛(…...
Django ORM详解:最全面的数据库处理指南
概要 深度探讨Django ORM的概念、基础使用、进阶操作以及详细解析在实际使用中如何处理数据库操作。这篇文章旨在帮助大家全面掌握Django ORM,理解其如何简化数据库操作,并透过表象理解其内部工作原理。 Django ORM简介 在深入讨论Django的ORMÿ…...
Istio 安全 授权管理AuthorizationPolicy
这个和cka考试里面的网络策略是类似的。它是可以实现更加细颗粒度限制的。 本质其实就是设置谁可以访问,谁不可以访问。默认命名空间是没有AuthorizationPolicy---允许所有的客户端访问。 这里是没有指定应用到谁上面去,有没有指定使用哪些客户端&#…...
04 Ubuntu中的中文输入法的安装
在Ubuntu22.04这种版本相对较高的系统中安装中文输入法,一般推荐使用fctix5,相比于其他的输入法,这款输入法的推荐词要好得多,而且不会像ibus一样莫名其妙地失灵。 首先感谢文章《滑动验证页面》,我是根据这篇文章的教…...
faac内存开销较大,为方便嵌入式设备使用进行优化(valgrind使用)
faac内存开销较大,为方便嵌入式设备使用进行优化,在github上提了issues但是没人理我,所以就搞一份代码自己玩吧。 基于faac_1_30版本,原工程https://github.com/knik0/faac faac内存优化: faac内存开销较大,为方便嵌入…...
分数线划定(c++题解)
题目描述 世博会志愿者的选拔工作正在 A 市如火如荼的进行。为了选拔最合适的人才,A 市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的 150% 划定,即如果计划录取 m 名志愿者…...
实战工业分拣:基于快马平台构建自适应openclaw配置系统
最近在做一个工业分拣的自动化项目,正好用到了openclaw机械爪的配置,整个过程挺有意思的,记录下实战经验。 项目背景 这个项目模拟的是工厂流水线上的智能分拣场景。传送带上会随机出现不同颜色和形状的物体,需要机械爪能自动识别…...
Vue项目本地部署神器:phpStudy+nginx配置全流程(支持多项目同时运行)
Vue项目本地部署神器:phpStudynginx配置全流程(支持多项目同时运行) 每次在本地调试Vue项目时,你是否也遇到过这样的困扰?项目打包后需要部署到服务器才能预览效果,但配置nginx对前端开发者来说又太过复杂。…...
别再死记硬背LFSR了!用Verilog手搓一个伽罗瓦型伪随机数发生器(附完整代码与仿真)
从零构建伽罗瓦LFSR:Verilog实战指南与工程避坑手册 在数字通信系统的测试环节中,工程师常常需要生成特定的数据序列来模拟真实场景。我曾在一个无线模块开发项目中,为了测试接收机的抗干扰能力,需要快速生成符合特定统计特性的伪…...
突破QQ音乐加密限制:qmcdump全场景解密工具实战指南
突破QQ音乐加密限制:qmcdump全场景解密工具实战指南 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 副标题&…...
Qwen3-VL-8B在软件测试中的应用:自动生成测试用例与缺陷报告截图分析
Qwen3-VL-8B在软件测试中的应用:自动生成测试用例与缺陷报告截图分析 最近和几个做软件测试的朋友聊天,大家普遍都在吐槽一件事:写测试用例和缺陷报告太费时间了。尤其是现在敏捷开发节奏快,版本迭代频繁,测试人员不仅…...
RyzenAdj终极指南:3分钟解锁AMD锐龙处理器隐藏性能
RyzenAdj终极指南:3分钟解锁AMD锐龙处理器隐藏性能 【免费下载链接】RyzenAdj Adjust power management settings for Ryzen APUs 项目地址: https://gitcode.com/gh_mirrors/ry/RyzenAdj 你是否感觉自己的AMD锐龙笔记本性能被限制住了?玩游戏时帧…...
如何将Rust二进制文件大小减少70%:min-sized-rust与主流优化方案全对比
如何将Rust二进制文件大小减少70%:min-sized-rust与主流优化方案全对比 【免费下载链接】min-sized-rust 🦀 How to minimize Rust binary size 📦 https://github.com/johnthagen/min-sized-rust 项目地址: https://gitcode.com/gh_mirror…...
intv_ai_mk11开发者友好:提供RESTful API文档、Curl示例、SDK接入指引
intv_ai_mk11开发者友好:提供RESTful API文档、Curl示例、SDK接入指引 1. 平台概述 intv_ai_mk11是基于Llama架构的中等规模文本生成模型,专为开发者设计,提供完整的API接入方案。该模型擅长处理通用问答、文本改写、解释说明和简短创作等任…...
Picocli错误处理终极指南:7个技巧构建健壮命令行应用
Picocli错误处理终极指南:7个技巧构建健壮命令行应用 【免费下载链接】picocli Picocli is a modern framework for building powerful, user-friendly, GraalVM-enabled command line apps with ease. It supports colors, autocompletion, subcommands, and more.…...
PowerShell-Suite终极指南:10个高级Windows安全工具深度解析
PowerShell-Suite终极指南:10个高级Windows安全工具深度解析 【免费下载链接】PowerShell-Suite My musings with PowerShell 项目地址: https://gitcode.com/gh_mirrors/po/PowerShell-Suite PowerShell-Suite是一个功能强大的Windows安全工具集合ÿ…...
