我们贰学习 第一期 | 教你读懂编译器的心
我们贰学习
♪
第一期
C语言课程已经开始了有一段时间了,大家的感受如何呢?既然开始这方面的学习,就一定会遇到报错的情况。不知道大家写代码的时候看到报错信息是种什么样的感受?
这又是啥?
(心情如图)
反正换做是之前的我,早就气的不知道飞到哪里去了。但是所谓士别三日,我早已非复吴下阿蒙,这些问题对于现在的我来说就是just so so。所以接下来,贰话说就带你了解报错信息,让你知道编译器到你跟你唠嗑了些啥!
错误和警告
首先需要说明的是,编译器所告诉你的,并不一定就都是错误。严格来说,编译器的输出有4种类型,分别是Error(错误),Warning(警告),Info(信息),Debug(调试),其中我们需要了解的就是Error和Warning。
一般来说,Error你必须要管,因为不管,你的代码无法工作;Warning你可以管也可以不管,这是编译器在提醒你,你的代码可能不太对劲。
编译错误是大家最常遇到的错误之一。在PTA的记录里面还可以看到大量的编译错误提示。这也是大家最为熟悉的一种报错信息。下面用一个例子,来分析一下编译错误的报错信息。
例1
不过,如果会自己看报错信息,无论IDE正不正常,都能自己找到错误点了。
接下来我们看看编译警告。如果你使用PTA(作业平台),相信你一定会遇到一个警告:
按照一样的办法,我们可以读到,这是个在a.c文件第5行第5个字符中发生的警告,内容是忽略了scanf的返回值。然而到目前为止,我们还不知道scanf的返回值是做什么用的,因此现阶段这个返回值忽略得理所应当。编译器在输出警告的时候,仅仅是一种提醒,你需要通过自己的判断,决定是否需要处理这个警告。
某些时候,编译器的警告会“发展”成错误。请看:
这段代码很显然是有毛病的。编译器也非常贴心,提示我“你是不是除以0了“?当然,这是个警告。
如果我一意孤行,愣是要运行,又会怎么样呢?
刚刚可以 “商量”的“警告”就变成了“不容置疑”的“错误”。所以如果能力允许,最好还是把错误连同警告一起干掉吧!
调试(Debug)
相信对于大家来说,还有一种恼人的错误。它并不是因为程序语法有问题,而是程序的算法不够严密准确。或许有些同学只能通过多次修改尝试的方法来改正错误。有没有办法能够快速定位到出错误的位置呢?
办法肯定是有的,那就是使用调试器。调试器的作用,主要有逐行运行代码,动态计算表达式的值,查看变量的值等等。
调试器的用法很简单,只要先设定断点(breakpoint),然后运行调试器就可以了。接下来以CLion为例,尝试调试器的用法。
*Dev-C++在Win10上可能无法运行调试器,毕竟它已经好久没更新了。
程序很听话地在31行停下来。无论什么时候,只要撞到断点,程序都会停下,并在下方显示出详细地变量信息。
图文 | 李浩
排版 | 李健中
审核 | 包孟红老师 唐俊屹 李婧琳