[深蓝学院] C++基础与深度解析 Week 1: C++基础

[深蓝学院] C++基础与深度解析 Week 1: C++编译与链接模型

  • 1. 简单的加工模型
  • 2. 解决方案:分块处理
  • 3. 由“分块处理”衍生出来的概念
    • 3.1 定义 / 声明
      • (a) 为什么需要“声明”?
    • 3.2 头文件 / 源文件
      • (a) 为什么需要源文件
    • 3.3 翻译单元
    • 3.4 一处定义原则
      • (a) 程序级
      • (b) 翻译单元级
  • 4. 编译链接的流程

本文是深蓝学院 C++课程的个人学习笔记,希望能帮助自己温故而知新,也能帮大家查漏补缺。

1. 简单的加工模型

[深蓝学院] C++基础与深度解析 Week 1: C++基础_第1张图片
问题:

  1. 加工耗时较长
  2. 即使少量修改也需要重新加工整个程序

2. 解决方案:分块处理

[深蓝学院] C++基础与深度解析 Week 1: C++基础_第2张图片

好处:

  1. 编译耗资源,但每次编译处理少
  2. 链接输入多,但处理速度较快
  3. 便于程序修改升级

3. 由“分块处理”衍生出来的概念

3.1 定义 / 声明

(a) 为什么需要“声明”?

  • 如果在源文件1中,我们定义一个变量 x x x,那我们直接在源文件1中进行使用即可。
  • 但如果在源文件2中,我们也想要使用这个变量 x x x呢?
  • 由于我们不希望重复定义这个变量 x x x,所以我们在源文件2~N中,我们就需要声明 x x x

[深蓝学院] C++基础与深度解析 Week 1: C++基础_第3张图片

3.2 头文件 / 源文件

(a) 为什么需要源文件

老师: 接着3.1章节中的情况讲,假如在源文件2~N中我们想使用变量 x x x,那么就需要在每个文件中声明一次x。
小明: 瓦塞 老师那得多麻烦呀!
老师: 所以,为了解决这个重复声明的麻烦,我们引入了头文件

3.3 翻译单元

翻译单元 = 源文件 + 头文件(直接/间接) - 应忽略的预处理语句

3.4 一处定义原则

(a) 程序级

一个函数/变量,在所有的翻译单元里面,通常只能有一个

  • 要是一个函数,被定义了两次。那系统就蒙了,“我到底该使用哪一个?”

(b) 翻译单元级

  • 特例:内联函数,类、模板
  • 要去:可以在多处翻译单元中出现同一个定义,但只要完全相同就行

4. 编译链接的流程

[深蓝学院] C++基础与深度解析 Week 1: C++基础_第4张图片

  1. 翻译 ( interpreter/preprocessor -i )
  2. 编译 ( compiler -s )
  3. 汇编 ( Assembler -o )
  4. 链接 ( Linkage -l)

你可能感兴趣的:(c++)