c语言程序的语句经过编译和链接,用c语言编写的源程序文件经过编译连接
第一个是翻译环境,在这个环境中,源代码被转换成可执行的机器指令。
第二个是执行环境,用于实际执行代码。
下图显示了我们的编译器将源文件编译成可执行文件的一般过程。
构成程序的每个源文件(test.c)通过编译过程被转换成目标代码(test.obj)。
每个目标文件都被一个链接器连接在一起,形成一个完整的可执行程序。
同时,链接器会在标准C函数库中引入程序使用的任何函数。
对于要成为最终二进制文件(test.exe)的源文件(test.c ),可以简单地用下图表示:
看图,我们知道编译分为三个步骤:
预编译(预处理)(test.c - test.i)
(1)处理所有评论,用空格代替。
(2)删除所有#define,展开所有宏定义。
(3)处理条件编译指令#if、#ifdef、#elif、#else、#endif
(4) Process #include并扩展包含的文件。
(5)保留编译器需要使用的#pragma指令。
编译(测试. i -测试. s)
(1)将C语言代码编译成汇编代码
(2)语法分析、词法分析、语义分析、符号汇总形成符号表。
编译(test.s - test.o)
汇编过程实际上是指将汇编语言代码翻译成目标机器指令的过程。对于翻译系统处理的每一个C语言源程序,都会通过这个处理最终得到对应的目标文件。目标文件中存储的是相当于源程序的目标的机器语言代码。
编译后,执行链接。链接会做什么?
符号表的合并和重新定位
最终形成(test.exe)
二、程序的运行环境
在有操作系统的环境中,程序必须装入内存:一般来说,这是由操作系统完成的。在独立的环境中,程序的装入必须手动安排,或者可以通过将可执行代码放入只读存储器来完成。
程序开始执行,然后调用主函数。
开始执行程序代码。此时,程序将使用一个运行时堆栈来存储局部变量和函数的返回地址。程序也使用静态内存,存储在静态内存中的变量在整个程序执行过程中保持它们的值。
终止程序。正常或意外终止主函数(代码错误)
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。