扫一扫 免费领取试听课
贵阳疫情后C语言培训班
贵阳疫情后C语言培训班---小编为您推荐达内教育
依托达内集团的课程体系(TTS6.0),雄厚的师资力量,广阔的就业平台,迄今为止已与上万家IT企业进行人才输送合作,其中紧密合作企业千余家、深入合作企业百余家、订单输送联盟企业百家。
C程序编译过程
编译一个C程序可以分为四阶段:
1、预处理阶段
gcc-E main.c-o hello.i生成预处理后的代码
预处理程序(cpp)根据字符#开头的命令,修改原始的C程序。例如main.c中行的#include<stdio.h>命令会告诉预处理器读取系统头文件stdio.h的内容,并将其直接插入到程序文本中。
同时,删除注解行,增加行号以及文件名标识。这会产生另一个C程序,通常以.i作为文件扩展名。因此,预编译的.i文件没有包含宏定义。
处理完后我们来看看hello.i文件。发现原来的7行代码变成了700多行,我们的代码在较后面。而前面多出来的代码就是.c中#include<stdio.h>展开的代码。
2、编译阶段
gcc–S main.c-o hello.s生成汇编代码
编译器就是把源文件(hello.i)翻译成汇编文件(hello.s)的过程。其中包括词法分析、语法分析等步骤,具体步骤可参照编译原理。
打开汇编代码之后,我们会发现里面有很多以.开头的行,对于这些.开头的行其实都是指导汇编器和链接器工作的伪指令。我们通常情况下,是可以忽略这些行的。
去掉这些行后剩下的部分。
3、汇编阶段
gcc–c main.c-o hello.o生成目标代码
对于上面的编译阶段,它是将编译器生成的.s文件转换为.o的二进制目标代码。
编译器(as)的作用是将hello.s转换为此阶段更为熟悉的机器语言指令,然后将这些转换的指令进行打包处理,打包成为一种被称为重定位目标程序的格式,较后进行保存在目标文件hello.o中。
hello.o文件是一个二进制文件,其字节编码为机器语言指令而非字符。假如我们在一个文本编译器中打开hello.o文件,会看到一堆乱码。
如果你一定要看的话,那么就是如下场景:
4、链接阶段
这一步是将汇编的机器指令集转换为可直接运行的文件,而目标文件进行链接的主要是因为在目标文件中可能使用到的字段(或函数),可以通过链接将多个不同的目标文件关联到一起。
根据上面的原理部分,我们可以从代码中看到使用了printf函数,对于此函数而言,它当然不是我们定义的,它属于标准C库中的一个函数,每个C编译器将提供该函数,printf函数位于一个单独预编译好的printf.o文件中,而这个文件必须以某种方式合并到我们的hello.o程序中,链接器(ld)就负责处理这种合并,然后得到hello文件,该文件是一个可执行目标文件(简称:可执行文件),可以加载到内存中,并由系统执行。
想了解具体详情可咨询在线客服或拨打400热线!
尊重原创文章,转载请注明出处与链接:http://news.peixun360.com/886472/ 违者必究!
以上就是 贵阳达内教育IT培训机构
小编为您整理 贵阳疫情后C语言培训班 的全部内容。