VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 846|回复: 2

[分享] c语言的编译过程

[复制链接]
79_avatar_middle
在线会员 发表于 2015-12-12 09:55:53 | 显示全部楼层 |阅读模式
C语言的编译过程分为四个过程:以test.c的编译过程为例:
    1.预处理
        此阶段要完成主要的3个工作:
        (1) 完成头文件内容的替换工作。
        (2)实现宏替换。
        (3)条件编译。
        从以上三个过程可以看出,此阶段的所有处理过程在C语言中都是以#开头的,此阶段不进行语法检查,只进行简单的替换工作。此阶段完成之后产生的.i文件会变大(原因:增加了替换后的内容)。
        在gcc中实现这个步骤使用以下命令:
        gcc -E test.c -o test.i
    2.编译
      编译程主要是通过词法分析和语法分析,在确认所有的指令都符合语法规则之后,将其翻译成等价的中间代码表示或汇编代码。即首先进行语法检查,然后进行翻译工作。
        在gcc中实现这个步骤使用以下命令:
        gcc -S test.i -o test.s
    3.汇编
     汇编实际上指把汇编语言代码翻译成目标机器指令的过程。对于被翻译系统处理的每一个C语言源程序,都将最终经过这一处理而得到相应的目标文件。目标文件中所存放的也就是与源程序等效的目标的机器语言代码。目标文件由段组成。通常一个目标文件中至少有两个段:
      代码段:顾名思义就是存放程序代码的段,主要存放一系列的指令。

      数据段:主要存放程序中要用到的各种全局变量或静态的数据。一般数据段都是可读,可写,可执行的。
      在gcc中实现这个步骤使用以下命令:
      gcc -c test.s -o test.o

    4.连接
     由汇编程序生成的目标文件并不能立即就被执行,其中可能还有许多没有解决的问题。
      例如,某个源文件中的函数可能引用了另一个源文件中定义的某个符号(如变量或者函数调用等);在程序中可能调用了某个库文件中的函数,等等。所有的这些问题,都需要经链接程序的处理方能得以解决。

      链接程序的主要工作就是将有关的目标文件彼此相连接,也即将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,使得所有的这些目标文件成为一个能够诶操作系统装入执行的统一整体

评分

参与人数 4驿站币 +1 热心值 +5 收起 理由
28_avatar_small 天下 + 1 希望多来点这些方面的知识
88_avatar_small 寂寞江湖 + 1 + 2
10_avatar_small cmx006 + 1
11_avatar_small 饮水机 + 1

查看全部评分





上一篇:C语言中结构体在函数中的应用
下一篇:c语言中的 strcmp()函数
10_avatar_middle
在线会员 发表于 2015-12-12 10:02:53 | 显示全部楼层
说的很详细 对新手有帮助
88_avatar_middle
online_vip 发表于 2015-12-12 10:06:52 | 显示全部楼层
新手多多学习
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-3-21 02:43

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表