
一起动脑筋 · 先看一个小故事
女孩写好任务单,可 CPU 不直接照着 C++ 文字工作。中间需要谁来转换?
把过程摊开来看
- 源代码人写的 C++
- 编译与链接转换并组合
- 可执行文件准备运行
- 运行才产生输出
编译工具把源代码转换成目标代码,链接把需要的部分组合起来。
像把一份设计图做成能用的机器:图纸画完与机器启动,是两件事。运行程序才会执行输入和输出。
01编译到底是什么?
编译(Compilation)是编译器读取源代码、分析结构和含义,并生成较低层表示或目标代码的过程。
对 C++ 来说,编译是构建可执行程序的核心阶段,但不是全部。
02编译器会做哪些事?
语法分析
检查代码结构。
语义检查
检查类型、名称等。
生成代码
转换成目标代码。
优化
改进生成结果。
03为什么它能发现一些错误?
int x = "hello";这通常会触发类型相关的编译诊断,因为字符串字面量不能直接赋给普通 int。
04编译和链接是一回事吗?
编译
把源文件转换成目标代码,并检查语言规则。
链接
把目标文件和库中的符号连接成最终程序。
05编译器还会优化代码吗?
会。现代编译器会删除无用计算、改进循环、合并表达式等,但必须遵守语言规则。
06编译错误和运行错误有什么区别?
编译错误
代码无法成功构建。
运行错误
程序运行时发生异常或非法操作。
逻辑错误
程序能跑,但答案不对。
你已经知道了什么
- 编译是分析源代码并生成较低层代码或目标代码的过程。
- 编译器会检查语法、类型和名称等规则,也可能优化。
- C++ 完整构建还包括预处理、汇编和链接。
- 编译通过不代表程序逻辑一定正确。
轮到你来试一试
计分器本来该加 2,却写成减 2。编译器一定会发现吗?
想好了吗?点开看解释
不一定。减法是合法操作,编译器通常不知道你的计分规则。要用已知答案的例子运行检查。