关于c语言运行期间所做的工作,主要分为4点
1.预处理阶段
关于预处理阶段,编译器主要进行了头文件展开,宏替换,条件编译这三个过程。
开始编译时,c语言会将头文件的代码嵌入到程序段中,并且对所有的宏进行替换,代码中所有的宏将被实际的值替换。
2.编译阶段
此时编译器会对c语言的语句进行语法检查,所有的语法错误包括编译时错误大多数会在此阶段产生,通过检查后编译器才会开始将高级语言转化为汇编语言。
3.汇编阶段
顾名思义,此阶段程序会转化为汇编语言,之所以要变成汇编语言是由于计算机组件的电气特性决定的,汇编语言可以直接操作硬件。而c语言具有出色的可移植性,可以在多种不同的硬件平台上运行,这就是嵌入式技术使用c语言的原因,因为嵌入式的实质,就是在已有的硬件平台上移植操作系统,移植的时候,需要修改的地方越少,证明移植性越好,c语言在这方面有着先天的优势,但是其劣势就是代码的复用性,维护性,可扩展性较差,当然这些方面是面向对象语言的强项,各有所长,包括汇编语言都是各自具有优势的语言。
4.链接阶段
链接阶段的任务是把所有的目标文件和库文件连接起来,形成可执行文件。
链接分为编译时链接,装载时链接和运行是连接两种。当然第一种是静态的,所谓静态的与动态的区别就是静态链接在编译时加载进了所有需要的代码到程序库中,这就意味着代码变得很庞大,但是效率会更高,简单来讲就好比要去上课,所有的书都在书包里就是静态链接,这样的好处是不管上什么课我都可以直接拿书,而动态链接的是我要上c语言课,我就回家去拿,这样效率就变得相对来说低一些,但是轻便灵活是其最大的特点,我书包很轻,走路不累,运行速度自然就上来了,gcc编译器中可以使用 -static来强制静态链接。