我想在刚开始学习c语言的时候,很多人都会感兴趣吧。 那就是我们用vc或vs写的后缀为. c的源文件如何成为后缀为. exe的可执行程序。
今天学到了一点有关这方面的内容,我来分享一下。 如果有错误的话,请改正。
ANSI C的任何一种实现都可以分为翻译环境和运行环境两个不同的环境;
翻译环境是指将源代码转换为可执行的机器指令。 执行环境是实际的执行代码。
在翻译环境中,可以分为编译和链接两个阶段。 编译可以生成目标文件,目标文件和标准C函数库中使用的函数通过链接生成可执行文件。
以gcc编译器为例:
编译:编译分为预处理程序处理、编译和程序集三个进程。
1 .预处理程序处理。 在此阶段,主要通过几个文本操作形成后缀为. I的文件,包括包含头文件、删除注释以及在define中定义的标识符替换级别的宏替换。
2 .编译,包括语法分析、词法分析、语义分析、符号摘要。 形成汇编代码。 后缀是. s
3 .汇编,制作符号表,将汇编代码转换为二进制指令,存储在test.o的目标文件中。
目标文件test.o是二进制文件
链接:包括合并段表、合并符号表和重新定位符号表,以及链接多个目标文件和库文件以生成可执行文件。
执行环境,即程序执行的过程:
1 .程序必须加载到内存中,一般由操作系统进行。
2 .程序开始执行,并调用main函数。
3 .开始执行程序代码。 程序使用运行时堆栈来存储函数的局部变量和返回地址。 此外,程序也使用静态存储器。 存储在静态存储器中的变量在程序运行期间一直保持。
4 .退出程序。