C语言之实用调试技巧(2)

如何写出好(易于调试)的代码
优秀的代码:
1. 代码运行正常
2. bug很少
3. 效率高
4. 可读性高
5. 可维护性高
6. 注释清晰
7. 文档齐全
常见的 coding 技巧:
1. 使用assert
2. 尽量使用const
3. 养成良好的编码风格
4. 添加必要的注释
5. 避免编码的陷阱
C语言之实用调试技巧(2)_第1张图片

strcpy是一种字符串拷贝的方式,单独我们今天不用这个方法,我们自定义一个函数来模拟实现库函数strcpy

C语言之实用调试技巧(2)_第2张图片 当我将一个NULL(空指针解引用的时候,程序就会报错),所以我们这里引入断言这个概念(assert),这时我们需要包含这个头文件C语言之实用调试技巧(2)_第3张图片空指针不为空指针就会报错,他会直接告诉你程序哪里有问题,大家可以将assert加上看一看效果C语言之实用调试技巧(2)_第4张图片

当然你也可以写成下列代码,while语句里面的循环我全都省略(但是必须要有个;),我们的实现字符串拷贝方式就在while哪个括号里面执行,然后将ret返回

C语言之实用调试技巧(2)_第5张图片

这里面也涉及到了我们曾经讲过的链式访问的知识,省略了一些步骤而已

给大家讲一下const的用法

C语言之实用调试技巧(2)_第6张图片这里的const相当于把n和&n给固定死了,不能改变

C语言之实用调试技巧(2)_第7张图片

但是p可以存放n的地址

const 修饰指针的时候
当const 放在*的左边的时候,限制的是指针指向的内容,不能通过指针变量改变指针指向的内容,但是指针变量的本身是可以改变的
当const 放在*的右边的时候,限制的是指针变量本身,指针变量的本身是不能改变的,但是指针指向的内容是可以通过指针来改变的

C语言之实用调试技巧(2)_第8张图片

*p的值是可以改变的,这里的const是限制p存放的地址只能是&m,不能改变成为&n

C语言之实用调试技巧(2)_第9张图片

这样放置const既不能修改值,也不能修改地址,希望大家能够理解

下面我们来模拟实现一个strlen这个函数

跟最开始的模拟实现库函数strcpy是大同小异的操作方式

我们来看代码

C语言之实用调试技巧(2)_第10张图片

这里特别强调一下size_t这个返回类型(我们这样就可以把int改成size_t),这样就和我们的库函数里面strlen的返回类型保持一致了

%zd:专门用于打印size_t这个返回类型的

%u:用于打印无符号整数

他们两个是没什么区别的

C语言之实用调试技巧(2)_第11张图片

最后我们来总结一下

7. 编程常见的错误
7.1 编译型错误---一般是找到语法问题
直接看错误提示信息(双击),解决问题。或者凭借经验就可以搞定。相对来说简单
7.2 链接型错误---链接期间发生的错误(比如函数的调用,函数名不匹配等等会报错LNK)
看错误提示信息,主要在代码中找到错误信息中的标识符,然后定位问题所在。一般是 标识符名不
存在 或者 拼写错误
7.3 运行时错误
借助调试,逐步定位问题。最难搞

本章终,希望对大家有帮助!

你可能感兴趣的:(C/C++,c语言)