程序是怎么跑起来的

从一段代码到能双击运行的 exe,中间发生了什么?

通识商用

◎学完你会

1走一遍:代码 → 程序

第 0 步 / 共 4 步
int main(){ cout << "Hi"; return 0; } // 你写的 a.cpp
① 预处理

预处理器

把 #include 展开,粘贴头文件内容

→
② 编译

编译器 g++

把 C++ 翻译成汇编指令(.s)

→
③ 汇编

汇编器

把汇编变成机器码目标文件(.o)

→
④ 链接

链接器

合并 .o 与库,生成可执行文件(a.exe)

点"下一步"开始。
关键认识:你写的 C++ 只是"文本"。机器只认 0/1 机器码。 编译就是把你的文本翻译成机器码——而程序真正跑起来,是从 main 的第一行开始往下执行。

2关键命令

命令作用
g++ a.cpp编译 a.cpp,默认生成 a.exe
g++ a.cpp -o hello编译并指定输出名 hello(.exe)
./hello(或双击)运行程序
g++ --version确认编译器装好了
一句话:你在源码里写 int main(){...},编译器只认 main 为入口,程序就从它开始。

3易错点

① 以为"双击 .cpp 就能跑"。.cpp 只是文本,必须先编译成 exe 才能运行。
② 改了代码没重新编译。跑的还是旧 exe,看不到改动——先 g++ 再运行。
③ 找不到 main。编译报错 undefined reference to main,说明入口写错了或没写。

↗跨学科小贴士

编译就像"把中文作文翻译成英文":内容没变,语言换了。CPU 只懂机器码(0/1), C++ 是所有"高级语言"里离机器码最近、性能最接近原生的语言之一——这也是它常用于系统/游戏/驱动的底气。

✎练一练

程序从哪里开始执行?
编译器把 main 当作程序入口。
下列哪条能生成可执行文件?
只有编译命令才能生成可执行文件;cat/edit 只是查看/编辑文本。