我们通常所写的代码并不能直接被程序执行,所以我们需要编译器来识别并处理我们的代码成为系统可以识别的代码,而在这一过程被称为翻译,经过翻译后代码成为可被执行的程序,所以翻译是编译器中重要的功能。
翻译的过程大致被分为两部分,分别是编译和链接。编译负责将代码转换为汇编代码,链接则是将各个文件连接在一起。首先来分析编译的过程:编译的过程也有着三个部分:预处理,编译,汇编。预处理的作用是删除所有注释,标识,行号以此来方便调试,同时会将#define的定义直接替换,到此为止完成了编译的第一步,同时文件的后缀有.c改为了.i。编译:分为词法分析,语法分析,语义分析。首先词法分析是将代码分割开来成为最小单位(如“if‘,”while"等等),其次是语法分析,语法分析的作用是使将单位组合成一个个表达式,语义的分析则是将代码整个分析并检查是否具有逻辑错误,此时文件的后缀由.i转换为.s。编译最后一步的汇编是使代码转化为机械指令(二进制),文件后缀由.s变为.o。
链接的作用:在汇编的步骤时,会形成一个符号表,而符号表,每一个出现的函数都会有对应的地址,但是我们会经常利用多个源文件来实现不同功能的函数,所以在一个文件中的符号表上并不是所有的地址都是正确的,有些函数的声明并不在此文件中,所以链接使这些文件连在一起,并将符号表合在一起使各个函数的地址成为正确的地址,以此来保证程序的运行正常。