跳到正文

第1章学习笔记:从源文件到可执行程序

课程笔记

通过逐步可编译的程序掌握从源文件到可执行程序,从现象走到语言规则、资源状态和工程证据。

关联:章节 第1章 从源文件到可执行程序

第1章笔记:从源文件到可执行程序

本章问题

通过逐步可编译的程序掌握从源文件到可执行程序,从现象走到语言规则、资源状态和工程证据。 七课组成一条从可编译现象到语言规则、对象状态和工程验证的链,不能拆成互不相干的语法点。

七课连接

  • 第一段C++程序与main:规则 exit status reflects main result;实验任务为写一个能编译运行的最小程序展示“第一段C++程序与main”,记录输入、关键对象状态、输出和编译命令,并用规则 exit status reflects main result 解释结果;严格边界为不得把“第一段C++程序与main”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《声明、定义与翻译单元》的输入或约束。
  • 声明、定义与翻译单元:规则 one definition rule;实验任务为写一个能编译运行的最小程序展示“声明、定义与翻译单元”,记录输入、关键对象状态、输出和编译命令,并用规则 one definition rule 解释结果;严格边界为不得把“声明、定义与翻译单元”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《预处理与头文件边界》的输入或约束。
  • 预处理与头文件边界:规则 include guards prevent duplicate text;实验任务为写一个能编译运行的最小程序展示“预处理与头文件边界”,记录输入、关键对象状态、输出和编译命令,并用规则 include guards prevent duplicate text 解释结果;严格边界为不得把“预处理与头文件边界”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《编译、汇编与链接》的输入或约束。
  • 编译、汇编与链接:规则 source→object→link→executable;实验任务为写一个能编译运行的最小程序展示“编译、汇编与链接”,记录输入、关键对象状态、输出和编译命令,并用规则 source→object→link→executable 解释结果;严格边界为不得把“编译、汇编与链接”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《名字、作用域与生存期预览》的输入或约束。
  • 名字、作用域与生存期预览:规则 scope≠storage duration;实验任务为写一个能编译运行的最小程序展示“名字、作用域与生存期预览”,记录输入、关键对象状态、输出和编译命令,并用规则 scope≠storage duration 解释结果;严格边界为不得把“名字、作用域与生存期预览”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《诊断信息与最小复现》的输入或约束。
  • 诊断信息与最小复现:规则 first diagnostic before cascade;实验任务为写一个能编译运行的最小程序展示“诊断信息与最小复现”,记录输入、关键对象状态、输出和编译命令,并用规则 first diagnostic before cascade 解释结果;严格边界为不得把“诊断信息与最小复现”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《多文件构建实验》的输入或约束。
  • 多文件构建实验:规则 dependency graph determines rebuild;实验任务为写一个能编译运行的最小程序展示“多文件构建实验”,记录输入、关键对象状态、输出和编译命令,并用规则 dependency graph determines rebuild 解释结果;严格边界为不得把“多文件构建实验”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《基本类型与值域》的输入或约束。

实验闭环

从空目录建立在线兼容的C++17程序,开启警告,运行本章两道代码题各四组测试,再新增一个失败用例。C++20扩展另作显式比较。保存编译命令、输入、输出、首个诊断和修复后的回归。涉及资源就画所有权,涉及容器就标迭代器有效性,涉及并发就画happens-before。

复盘

错题不能只记“粗心”。标记它属于阶段、类型、控制、对象生存期、所有权、异常、复杂度还是并发。更换输入与实现重做阶段卷;能解释规则为何阻止错误,并能展示反例,才算迁移成功。