C入门篇(十),更快更好地完成程序调试

https://m.toutiao.com/is/JT3vXKn/

当我们按照自己的思路编写好一个完整的程序,就要对它进行调试(debug)了,调试过程包括我们熟悉的编译和连接,还包括运行和简单的数据测试等,如下图

调试主要分为4个步骤和两种处理方式,我们把程序的编译和连接统称为编译阶段,把程序的运行和测试统称为运行阶段。在编译阶段发生的错误称为编译错误,在运行阶段发生的错误称为运行时错误。对于编译错误,我们通过检查并修正语法错误来解决:对于运行时错误,我们通过检查并修正语意错误来解决。

  • 如何检查语法错误

所谓语法错误是指在书写语句时没有按照相应的语法格式。常见的语法错误有变量未定义,括号不匹配,遗漏了分号。大多数的语法错误都是能够被编译器发现。因此,相对语意错误来说,语法错误更容易被发现,更容易被解决。

语法检查的工作由编译器来完成,很多情况下编译器无法智能的报告出真正的语法错误和错误位置。比如缺少一个变量的定义,而该变量在程中被使用6次,则编译器可能会报告6个甚至更多的语法错误,而实际上错误只有一个。所以,对编译器来说,任何一个语法错误都可能是“牵一发而动全身”的。

那么这种可能发生“误报”的情况下,我们如何才能快速,正确地找到错误的位置呢?

由于编译器是让顺序查找语法错误的,所以它所找到的第一个错误位置往往是正确的。如果程序规模不大,编译一次的时间不是很长,我们可以每次只修正编译器报告的第一个错误以及由此可发以发现的连带错误,直到整个程序没有任何错误为止,

下面我们就用这个方法来来检查下面的程序,

上图中的代码存在四个错误

第一个错误 i末定义 error C2065: 'i' : undeclared identifier

解决方法,for(int i=0,i<3;i++)

第二个错误 逗号语法错误 error C2143: syntax error : missing ',' before '<'

解决方法,for(int i=0;i<3;i++)

第三次错误 cin末定义 error C2065: 'cin' : undeclared identifier

解决方法 在 #include <iostream> 下添加 using namespace std;

第四个错误 c末定义error C2065: 'c' : undeclared identifier

解决方法 int c=a+b;

至此,整个程序的所有语法错误都被检测出来并且被修正,程序编译阶段没有任何错误了。通过对这个程序的语法检查,我们总结出以下几点:

(1)编译器报告的第一个错误位置往往是有效的,但是报告的错误内容未必正确,比如第二次编译时报告的错误是在“小于号之前缺少了逗号”,而事实上问题是for语句中应该使用分号,所以,报告的错误内容只能参考。

(2)编译器报告的错误数目与实际错误数目未必符合,甚至可能改正一个错误后,错误数反而增加了,所以,报告的错误数目不能正确的描述实际的错误规模。

(3)编译器报告的警告也应当重视,有些人认为即使程序存在警告,但是它能正常运行,所以警告可以被忽视,这种想法是错误的,如果一个程序是完美的,为什么编译器还要给出警告?警告的存在就说明了这个程序有些地方还存在缺陷。

  • 常见语法错误及解决方法

本篇完 !欢迎大家收藏与转发 下一篇<<查找错误点>>

(0)

相关推荐

  • 一文讲解Java基本数据类型的包装类

    Java语言是一种面向对象的语言,但Java中的基本数据类型却是非面向对象的,这在实际使用中存在着许多不便,为了解决这种不足,在设计类时为每一种基本数据类型设计了相应的类,这样八种与基本数据类型相对应 ...

  • 编译与链接

    之前天天编软件,总是一键"build",然后等啊等啊,修改报错的地方.相信也有一些非计算机专业的软件工程师和我一样,从来不知道到底我们编译出来的hex文件到底是怎么生成的.直到最近 ...

  • 9,方舟编译器

    方舟编译器简介 方舟编译器改变了系统及应用的编译和运行机制,直接将高级语言编译成机器码,让手机能直接听懂"高级语言",消除了虚拟机动态编译的额外开销,提升了手机运行效率. 同时,方 ...

  • 如何更快更干净的清除门板上的黑胶泥

    如何更快更干净的清除门板上的黑胶泥

  • 美海军将研发配备类似鲨鱼皮肤作外壳的水下潜航器,更快更隐蔽

    美国海军研究实验室将研发配备类似鲨鱼皮肤作为外壳的无人水下潜航器. 据印度防务世界网站5月7日报道,美国海军研究实验室正在研发配备类似鲨鱼皮肤作为外壳的无人水下潜航器,旨在为水下潜航器提供更快的速度和 ...

  • 对焦更快更安静 佳能新18-55mm镜头试用

    在去年年初,佳能更新了旗下入门级单反相机EOS650D,升级后的型号为EOS700D.相比于前代产品,EOS 700D在保持了优异机身性能的同时还将原来那支老18-55mm二代镜头升级成了新版的EF- ...

  • 用大头笔大插法,画松树效果更快更好。

    用大头笔大插法,画松树效果更快更好。

  • 催缴物业费这种方法比起诉更快更有效

    业主欠交物业费,一直是物业企业最头痛的问题. 以往,物业公司通常通过停水.停电的方式来迫使欠费业主或物业使用人缴交欠款,但<物业管理条例>明确规定了水.电费用由供水.供电企业直接向使用人收 ...

  • 文涛 | 懂得缓解焦虑,才会走得更快更稳

    每日推送喜乐文涛老师课程精华.传递正能量 第一时间获知现场课.沙龙信息 我们每个人,对自己得到的钱,对自己拥有的东西,很多时候是不去看的.看都不看,天天盯着自己没有的,说我缺这少那,没人爱我,身材不好 ...

  • 机械人都要学习的弹簧基础知识,弹簧手册让你选弹簧更快更准

    弹簧是利用材料的弹性和结构特点,通过变形和储存能量工作的一种机械零(部)件,可用于减震.夹紧.测力等.弹簧在各种元件中用途广泛,国家标准中规定了弹簧标准件的规格.在从事设计工作时,应尽量从标准件中选取 ...

  • 吡虫啉防治害虫抗性大?这4个复配药剂建议收藏,防治更快更彻底

    蚜虫.蓟马等刺吸式害虫比较多,吡虫啉,作为防治刺吸式害虫效果比较好的杀虫剂,经常被提到. 1.吡虫啉特性 吡虫啉是烟碱类超高效杀虫剂,害虫接触吡虫啉后,中枢神经会收到阻碍,最后麻痹死亡. 吡虫啉不仅有 ...

  • 早田希娜急长发球战例,谈乒乓球怎样练发球,如何发得更快更转

    前面制作了早田希娜的勾手发球的视频,今天谈谈正手顺旋转怎样发急长,怎样发得突然,速度快旋转强. 为什么选用早田希娜的战例来讲呢,因为目前一流运动员很少发急长,都怕出台,对手直接发力进攻. 一般是选择发 ...