编译过程(直觉版)

你写的是文本,CPU 执行的是机器码。中间有一条流水线。初学不必背每个细节,但要能对常见报错「对号入座」。

1. 概念:流水线三段

  1. 预处理:处理 #include、#define、#ifdef,展开成更大的 .i 文件
  2. 编译:语法检查、优化,生成汇编/目标文件(.o / .obj)
  3. 链接:把多个目标文件和库拼成可执行文件

2. 实际命令例子

C
1gcc hello.c -o hello # 一步到位
2gcc -c hello.c -o hello.o # 只编译不链接
3gcc hello.o -o hello # 链接
4gcc -Wall hello.c -o hello # 打开常见警告(推荐)

3. 报错类型地图

阶段典型报错关键词你该查什么
预处理missing file头文件路径/拼写
编译syntax error / expected语法、分号、括号
链接undefined reference函数没实现或没链库
链接duplicate symbol重复定义全局函数/变量

4. 预处理示意

C
1#define N 3
2#include <stdio.h>
3 
4int main(void) {
5 printf("%d\n", N); // 预处理后 N 会被换成 3
6 return 0;
7}

可以试试 gcc -E hello.c 只看预处理结果(输出很长,了解即可)。