C语言编译过程

        C语言应该是所有程序猿刚刚入门时所接触的语言,在刚刚开始学习实践时,程序猿们从二进制的角度用一句"Hellow world!"向这个世界问了个好。

        C语言自诞生以来就屹立不倒,由此可见C语言在程序猿的世界是多么重要!作为一个大学牲C语言菜鸟,虽然使用了C语言开发了些项目,但是其真正的面貌我还是没有看清楚。所有有必要从底层重新认识认识我这个C语言朋友啦,不然哪天被这位朋友戏耍得团团转那可就真的很伤心!

        但是对于这么一段简单的代码,真的了解他嘛?

C语言编译主要分为四个阶段

        1、预处理

        该阶段主要完成#符号后面的各项内容到源文件的替换。如:#ifdef为完成条件编译的替换;#include为在当前目录、指定目录或者默认目录搜索头文件,并将头文件拷贝到源文件中;#define为替换define的内容。

        该阶段由编译器完成,产生的是预处理文件(.i)。

        2、编译

        C语言代码由固定的词汇按照固定的格式组织起来,简单直观,程序员容易识别和理解,但是对于CPU,C语言代码就是天书,根本不认识,CPU只认识几百个二进制形式的指令。这就需要一个工具,将C语言代码转换成CPU能够识别的二进制指令,也就是将代码加工成 .exe 程序的格式;这个工具是一个特殊的软件,叫做编译器(Compiler)

        该阶段完成语法和语义分析,然后生成中间代码,其中中间代码是汇编代码,但是机器还是不能执行。

        该阶段由编译器完成,产生的是汇编文件(.s)。

        3、汇编

        该阶段主要完成将汇编代码翻译成机器码指令,并将这些指令打包形成可重定位的目标文件。

        该阶段由汇编器完成,产生的是目标文件(.o)。

        4、链接

        该阶段完成文件中调用的各种函数、静态库和动态库的链接,并将他们一起打包合并形成目标。

        该阶段由链接器完成,产生的是目标文件(.o)。

        C语言代码经过编译以后,并没有生成最终的可执行文件(.exe 文件),而是生成了一种叫做目标文件(Object File)的中间文件(或者说临时文件)。目标文件也是二进制形式的,它和可执行文件的格式是一样的。对于 Visual C++,目标文件的后缀是.obj;对于 GCC,目标文件的后缀是.o

        链接(Link)其实就是一个“打包”的过程,它将所有二进制形式的目标文件和系统组件组合成一个可执行文件。完成链接的过程也需要一个特殊的软件,叫做链接器(Linker)。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值