目录
一、前言:编译器都替我做了哪些工作?
对于c语言的初学者来说,一上来就会对#include、 #define 这些预处理指令表示摸不着头脑,询问老师,老师便会回答 :你先不用懂,这个问题先放着吧!.......
那么今天终于到了要揭秘的时刻了!完结撒花!
1.1 test.c ~> test.exe经历的步骤
如图所示
编译器主要在翻译环境中帮我们完成了三个步骤:预处理、编译、汇编。
下面我们逐一讲讲 每一步具体都干了什么
1.1.1预处理
1.首先注释被替换成空格(注释被删除)
2.对头文件的包含#include进行处理 将包含的内容加入进源代码里
3.# define 重定义符号的替换
总的来说是对文本进行处理,到这一步代码还能看懂
1.1.2编译
这一步主要是把C 语言代码翻译成汇编代码
并对其进行词法分析、语法分析、语义分析、符号汇总
1.1.3汇编
将汇编代码翻译为二进制指令
生成以.o结尾的目标文件
同时生成符号表
1.1.4链接
链接目标文件和链接库生成可执行的二进制程序
合并段表
符号表的合并和重定位