4.多多动手,尝试调试,才能有进步。🙌
一定要熟练掌握调试技巧。
初学者可能80%的时间在写代码,20%的时间在调试。但是一个程序员可能20%的时间在写
程序,但是80%的时间在调试。
这里所讲的都是一些简单的调试。
以后可能会出现很复杂调试场景:多线程程序的调试等。多多使用快捷键,提升效率。
5. 一道经典面试题目,这里用调试进行演示分析:🙌
#include <stdio.h> int main() { int i = 0; int arr[10] = { 0 }; for (i = 0; i <= 12; i++) { arr[i] = 0; printf("hehe\n"); } return 0; }
调试后分析出这段代码的问题和原因:
6. 如何写出好(易于调试)的代码。🙌
6.1 优秀的代码:
1.代码运行正常
2.bug很少
3.效率高
4.可读性高
5.可维护性高
6.注释清晰
7.文档齐全
常见的coding技巧:
8. 使用assert
9. 尽量使用const
10. 养成良好的编码风格
11. 添加必要的注释
12. 避免编码的陷阱。
6.2 典型栗子示范:
模拟实现库函数:strcpy
#include<assert.h> char * my_strcpy(char *arr1,const char *arr2) { assert(arr1 && arr2); char* str1 = arr1; while (*str1++ = *arr2++) { ; } return arr1; } int main() { char arr1[20] = { 0 }; char arr2[] = "Hello bit!"; printf("%s", my_strcpy(arr1, arr2)); return 0; }
注意:
1.分析参数的设计(命名,类型),返回值类型的设计
2.这里讲解野指针,空指针的危害。
3.assert的使用,这里介绍assert的作用
4.参数部分 const 的使用,这里讲解const修饰指针的作用
5.注释的添加
6.3 const的作用
const修饰指针变量的时候:
1.const如果放在*的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改变。但是指针变量本身的内容可变。
2.const如果放在*的右边,修饰的是指针变量本身,保证了指针变量的内容不能修改,但是指针指向的内容,可以通过指针改变。
这里举个栗子辅助大家理解: 模拟实现库函数:strlen
#include<stdio.h> #include<assert.h> int my_strlen(const char* p) { assert(p); char* str = p; while (*p != '\0') { p++; } return p - str; } int main() { char arr[] = "Hello bit!"; printf("%d", my_strlen(arr)); return 0; }
7. 编程常见的错误🙌
7.1 编译型错误
编译型错误其实就是语法错误,这种错误比较好发现。直接看错误提示信息(双击)就可以跳到错误位置,解决问题。或者凭借经验就可以搞定。相对来说简单。
7.2 链接型错误
看错误提示信息,主要在代码中找到错误信息中的标识符,然后定位问题所在。一般是标识符名不存在或者拼写错误。一般链接型错误发生后,直接看错误提示信息(双击)是不可以跳到错误位置。
一般链接型错误信息提示如下图所示:
7.3 运行时错误
这种错误是最难搞的,也是我们主要借助调试来解决的错误,逐步定位问题。最难搞。
温馨提示:调试这种技能,只能不断积累排错经验,才能牢牢掌握的,必须实践。
总结撒花💞
本篇文章旨在分享C语言详解Visual Studio 2022(VS2022)编译器 -—实用调试技巧的相关知识点。希望大家通过阅读此文有所收获!😘如果我写的有什么不好之处,请在文章下方给出你宝贵的意见😊。如果觉得我写的好的话请点个赞赞和关注哦~😘😘😘