vlambda博客
学习文章列表

我们贰学习 第一期 | 教你读懂编译器的心

我们贰学习


第一期

     本栏目意在通过热心同学分享学习经验、交流学习心得,使大家共同进步。该栏目所有内容的解释权均归投稿同学所有,欢迎大家踊跃投稿积极沟通!

    C语言课程已经开始了有一段时间了,大家的感受如何呢?既然开始这方面的学习,就一定会遇到报错的情况。不知道大家写代码的时候看到报错信息是种什么样的感受?


我们贰学习 第一期 | 教你读懂编译器的心
这是啥?

     

  这又是啥?


我们贰学习 第一期 | 教你读懂编译器的心




我们贰学习 第一期 | 教你读懂编译器的心

(心情如图)


    反正换做是之前的我,早就气的不知道飞到哪里去了。但是所谓士别三日,我早已非复吴下阿蒙,这些问题对于现在的我来说就是just so so。所以接下来,贰话说就带你了解报错信息,让你知道编译器到你跟你唠嗑了些啥!


01

错误和警告


    首先需要说明的是,编译器所告诉你的,并不一定就都是错误。严格来说,编译器的输出有4种类型,分别是Error(错误),Warning(警告),Info(信息),Debug(调试),其中我们需要了解的就是Error和Warning。

    一般来说,Error你必须要管,因为不管,你的代码无法工作;Warning你可以管也可以不管,这是编译器在提醒你,你的代码可能不太对劲。


   编译错误是大家最常遇到的错误之一。在PTA的记录里面还可以看到大量的编译错误提示。这也是大家最为熟悉的一种报错信息。下面用一个例子,来分析一下编译错误的报错信息。


例1

我们贰学习 第一期 | 教你读懂编译器的心
第一行,.\Err1.c: In function ‘main’:
Err1.c是这个文件的文件名,前面的.\代表当前目录,后面按英文翻译出来,就是:当前目录下Err1.c文件,在main函数里面:

第二行,.\Err1.c:4:27: error: expected ')' before ';' token
首先还是文件名,随后的4:27中,4代表第4行,27代表这一行的第27个字符, error,表示这是一个错误(Error)而不是警告(Warning)。然后是正文,翻译过来就是’;’前需要一个’)’。
从第三行开始,就是代码摘要了,相信大家都清楚,也不再赘述。

    怎么样,是不是很清楚呢?当然,如果使用一些比较好的IDE,它会帮你把错误的位置标在代码中。


我们贰学习 第一期 | 教你读懂编译器的心

    不过,如果会自己看报错信息,无论IDE正不正常,都能自己找到错误点了。


    接下来我们看看编译警告。如果你使用PTA(作业平台),相信你一定会遇到一个警告:


我们贰学习 第一期 | 教你读懂编译器的心

    按照一样的办法,我们可以读到,这是个在a.c文件第5行第5个字符中发生的警告,内容是忽略了scanf的返回值。然而到目前为止,我们还不知道scanf的返回值是做什么用的,因此现阶段这个返回值忽略得理所应当。编译器在输出警告的时候,仅仅是一种提醒,你需要通过自己的判断,决定是否需要处理这个警告。

    某些时候,编译器的警告会“发展”成错误。请看:


我们贰学习 第一期 | 教你读懂编译器的心

    这段代码很显然是有毛病的。编译器也非常贴心,提示我“你是不是除以0了“?当然,这是个警告。

    如果我一意孤行,愣是要运行,又会怎么样呢?


我们贰学习 第一期 | 教你读懂编译器的心

    刚刚可以 “商量”的“警告”就变成了“不容置疑”的“错误”。所以如果能力允许,最好还是把错误连同警告一起干掉吧!


02

调试(Debug

 相信对于大家来说,还有一种恼人的错误。它并不是因为程序语法有问题,而是程序的算法不够严密准确。或许有些同学只能通过多次修改尝试的方法来改正错误。有没有办法能够快速定位到出错误的位置呢?

    办法肯定是有的,那就是使用调试器。调试器的作用,主要有逐行运行代码,动态计算表达式的值,查看变量的值等等。

    调试器的用法很简单,只要先设定断点(breakpoint),然后运行调试器就可以了。接下来以CLion为例,尝试调试器的用法。

*Dev-C++在Win10上可能无法运行调试器,毕竟它已经好久没更新了。


我们贰学习 第一期 | 教你读懂编译器的心 我们贰学习 第一期 | 教你读懂编译器的心

    程序很听话地在31行停下来。无论什么时候,只要撞到断点,程序都会停下,并在下方显示出详细地变量信息。

    另外,点按红色下划线位置,可以切换到平时的输入输出界面,可以在这里输入数据,查看输出。
粉色圈内可以运行下一行代码,橙色圈内可以重新运行,蓝色圈内可以放过这个断点,直到碰到下个断点或者程序结束,棕色圈内回强行结束程序。
    如果你对自己的代码的运行流程不大明白,不妨跟着调试器走一走,或许你就能恍然大悟!
    怎么样,看完以上这些内容有没有对你以后写代码有帮助呢,或者说把你吓得不行,加深了你对编程的畏惧心理呢?总而言之,言而总之,欢迎大家一起来交流学习。今天的C语言提示就到这里,随着课程进度我们会发布更多有用的小技巧,小工具,敬请期待!

图文 | 李浩 

排版 | 李健中

审核 | 包孟红老师 唐俊屹 李婧琳