调试技巧(2)

简介: 调试技巧(2)

6. 如何写出好(易于调试)的代码

6.1 优秀的代码:

  1. 代码运行正常
  2. bug很少
  3. 效率高
  4. 可读性高
  5. 可维护性高
  6. 注释清晰
  7. 文档齐全

常见的coding技巧:

  1. 使用assert
  2. 尽量使用const
  3. 养成良好的编码风格
  4. 添加必要的注释
  5. 避免编码的陷阱。

这里讲一下assert 和const的作用

assert相当于断言,是一种暴力解办法的一个好东西,assert括号里的东西如果不满足条件的话,他就会报错,这样就很好的阻止一些错误的发生,当然我们在使用的时候一定要包含他的头文件<assert.h>.

const

const修饰指针变量的时候:

  1. const如果放在*的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改
    变。但是指针变量本身的内容可变。
  2. 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 运行时错误

借助调试,逐步定位问题。

今天的分享就到这里,谢谢大家!!!!

相关文章
|
Java 关系型数据库 MySQL
基于springboot心理树洞管理系统(分前后台springboot+mybatis+mysql+maven+vue+echarts)
基于springboot心理树洞管理系统(分前后台springboot+mybatis+mysql+maven+vue+echarts)
253 0
|
机器学习/深度学习 存储 自然语言处理
TCN时间卷积网络
翻译:《Sequence Modeling Benchmarks and Temporal Convolutional Networks 》
862 0
|
存储 搜索推荐 算法
【初阶数据结构篇】归并排序和计数排序(总结篇)
归并排序(MERGE-SORT)是建⽴在归并操作上的⼀种有效的排序算法,该算法是采⽤分治法(Divide andConquer)的⼀个⾮常典型的应⽤。
177 0
|
缓存 JavaScript API
探索后端开发:构建高效API的艺术
【10月更文挑战第40天】本文深入探讨了后端开发的核心—构建高效且可维护的API。通过分析设计原则、技术选型、性能优化以及安全性考量,文章旨在为读者提供一套完整的方法论,以实现高质量API的开发。从理论到实践,我们不仅讨论了RESTful架构和GraphQL等技术的优劣,还涵盖了缓存策略、数据库优化等性能提升技巧。同时,安全性章节将引导读者如何保护API免受常见攻击。最后,通过一个实际的代码示例,展示了如何将这些概念应用于创建一个简洁而强大的API。
|
分布式计算 资源调度 安全
深入理解Java GSS(含kerberos认证及在hadoop、flink案例场景举例)
深入理解Java GSS(含kerberos认证及在hadoop、flink案例场景举例)
751 0
|
XML 移动开发 前端开发
【JavaWeb】Thymeleaf的简介与使用(上)
【JavaWeb】Thymeleaf的简介与使用(上)
【JavaWeb】Thymeleaf的简介与使用(上)
解决C#winForm窗口闪烁问题
三种解决方法: 1.在构造方法中设置 ControlStyles 的OptimizedDoubleBuffer 和AllPaintingInWmPaint为True,完全启用双缓冲。 2.设置CreateParams的ExStyle为ExStyle 为 0x02000000 (WS_EX_COMPOSITED) 3.这种方法不会加快绘制的过程。当发生绘制时,窗体只是停留在不可见的状态,当绘制完成后就会在屏幕上弹出
2353 0
解决C#winForm窗口闪烁问题
|
网络协议 前端开发
使用node、Socket.io 搭建简易聊天室(一)
使用node、Socket.io 搭建简易聊天室
339 0
带你读《数字设计和计算机体系结构(原书第2版·ARM版)》之二:组合逻辑设计
采用一种独特的现代数字设计方法,先介绍数字逻辑门,接着讲述组合电路和时序电路的设计,并以这些基本的数字逻辑设计概念为基础,重点介绍如何设计实际的MIPS处理器。另外,在全书的实例中运用SystemVerilog和VHDL展示基于CAD的电路设计方法和技术。通过《数字设计和计算机体系结构(原书第2版)》,读者能够构建自己的微处理器,并能够自顶向下地理解微处理器的工作原理。