摘要
本课确立本课程直到结束都将遵循的工作方式。它描述编辑、保存、编译、运行、阅读的循环,并解释为什么错误最好在尽可能早的阶段被发现;介绍本课程推荐的编译命令及其每个选项的作用;演示如何在终端中完成这一循环,以及如何配置 Visual Studio Code,使它用同样的选项编译;教你在编译器的输出中区分错误与警告,并找到它们所指的那一行;介绍检测器,它们在程序陷入某些未定义行为时让程序停下,并指出那一行;最后让控制台做好准备,能正确显示中文。
学习目标
- 在终端中用本课程的选项(
-std=c++23 -Wall -Wextra及其余选项)编译程序,用-o为可执行文件命名,并运行它。 - 配置 Visual Studio Code,使它用与终端相同的选项编译,并在其问题面板中显示警告。
- 在编译器的输出中区分错误与警告,说出产生每条警告的选项,并找到它所指的那一行。
- 启用内存错误检测器和未定义行为检测器,并在它们的报告中认出故障的种类以及发生故障的那一行。
- 诊断输出为何显示奇怪的符号而不是汉字,并配置编辑器和控制台,使文字正确显示。
工作循环
写程序不是一次完成的动作,而是一个在同一次工作中重复几十遍的循环。它有五个环节:编辑源代码;保存文件,因为编译器读的是磁盘,而不是编辑器的屏幕;编译,也就是请编译器把文件翻译成可执行文件;运行结果;然后仔细阅读编译器和程序写出的一切。读到的内容引出新的编辑,循环重新开始。
最后一个环节最常被忽视,却最为重要。前提很简单:缺陷发现得越晚,改正它的代价就越高。如果由编译器指出,就知道它在哪一行,而且几乎总能知道原因;如果在运行时才显现,只知道出了问题;如果几周之后、换了别的数据才显现,可能谁也查不出原因。由此可知,缺陷应当尽早发现,而编译器应被当作程序的第一道检查:一位不知疲倦的读者,只要配置得当,它提醒的远不止拼写错误。
本课在三个层次上配置这道检查:错误,它们使可执行文件无法生成;编译器警告,它们允许生成可执行文件,但指出可疑的代码;以及检测器(sanitizer),它们在程序运行时监视程序。本课假定编译器和编辑器已经安装好(第 1.3 课)。示例中用到变量和 if 语句,它们将在第 2.1 课和第 4.1 课中讲解;这里能读懂就够了。
正在加载内容…
已完成
登录账户以保存您的进度