Files
fzu-product/3.编程思维体系构建/3.4.7.3C编译器干了什么.md
2023-04-14 15:41:04 +08:00

28 lines
975 B
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# C 编译器干了什么
# 以 gcc 为例
1、预处理,生成 .i 的文件[预处理器 cpp]
2、将预处理后的文件转换成汇编语言, 生成文件 .s [编译器 egcs]
3、有汇编变为目标代码(机器代码)生成 .o 的文件[汇编器 as]
4、连接目标代码, 生成可执行程序 [链接器 ld]
# 有啥用
有一天你发现,某一段 C 语言只有几行,但是用了大量的魔法宏定义以及魔法操作以及神奇的元编程。
你想看懂他,你可能需要学会 gcc -E。将他们都翻译成.i 文件。
如果有一天你要学习汇编语言,或者说出现了在代码中看不出的 bug你可能需要翻译成.s 文件
# 了解更多
当然不止如此,编译器还承担了优化的过程,有时候同一份代码,经过 O1 和 O2 不同优化可能最后代码都不一样。
推荐阅读
[http://www.ruanyifeng.com/blog/2014/11/compiler.html](http://www.ruanyifeng.com/blog/2014/11/compiler.html)