刚开始学c语言时,我想很多人都会好奇一件事吧,那就是:我们用vc或者vs写的后缀为.c的源文件怎么变成后缀为.exe的可执行程序。
今天学到了点这方面相关的内容,所以来分享一下,如果有错误之处,麻烦帮我改正。
在ANSI C的任何一种实现里都分为:翻译环境和运行环境,两个不同的环境;
翻译环境是在环境中源代码转化成可执行的机器指令;执行环境则是实际执行代码。
在翻译环境可以分为两大阶段:编译和链接; 通过编译可以生成目标文件,目标文件和标准C函数库中所用到的函数通过链接器链接生成可执行程序。
以gcc编译器为例:
编译:编译可以分为预处理器处理,编译,汇编三个过程。
1. 预处理器处理,在这一阶段,主要是一些文本操作,包括头文件的包含,注释的删除,define定义的标识符替换级宏替换,形成一个后缀为.i的文件。
2. 编译,包括语法分析,词法分析,语义分析,符号汇总。形成汇编代码。文件后缀为.s
3. 汇编,形成符号表,将汇编代码转换成二进制指令,存储到test.o的目标文件里。
目标文件test.o是一个二进制文件
链接:包括合并段表,符号表的合并和符号表的重定位,把多个目标文件和库文件链接生成可执行程序。
运行环境,即程序执行的过程:
1. 程序必须载入内存中,一般由操作系统完成。
2. 程序的执行开始,调用main函数。
3. 开始执行程序代码,程序使用一个运行时堆栈,存储函数的局部变量和返回地址,同时程序也会使用静态内存,存储于静态内存中的变量在程序的执行过程中会一直保留。
4. 终止程序。
版权声明:本文为wei_cheng18原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。