C++基础(三)

109 阅读1分钟

C++的编译 / 链接模型

简单的加工模型

1.PNG

问题: 无法处理大型程序

  1. 加工耗时较长

  2. 即使少量修改,也需要全部重新加工

解决方案:分块处理

2.PNG

好处

  1. 编译耗资源但一次处理输入较少

  2. 链接输入较多但处理速度较快

  3. 便于程序修改升级

由"分块处理"衍生出的概念

  1. 定义 / 声明

  2. 头文件 / 源文件

  3. 翻译单元

    源文件 + 相关头文件(直接/间接) - 应忽略的预处理语句

  4. 一处定义原则

    程序级:一般函数

    翻译单元级:内联函数、类、模板

编译/链接模型

3.PNG

预处理

  • 将源文件转换为翻译单元

  • 防止头文件被循环展开

    • #ifdef 解决方案
    • #pragma once 解决方案

编译

  • 将翻译单元转换为相应的汇编语言表示
  • 编译优化 https://godbolt.org/z/zh9aqx
  • 增量编译 v.s. 全部编译

链接

  • 合并多个目标文件,关联声明与定义
  • 连接(Linkage)种类:内部连接、外部连接、无连接
  • 链接常见错误:找不到定义

C++ 编译/链接过程是复杂的,预处理、编译与链接都可能出错

编译可能产生警告、错误,都要重视