【C】C语言编译过程

1,编译预处理(gcc -E main.c -o main.i)

  • 文件包含复制 将源文件中一"#include"格式包含的文件复制到编译的源文件中
  • 宏定义替换 用实际的值替换用"#define"定义的字符串
    __DATE__:当前源程序的创建日期。
    __FILE__:当前源程序的文件名称(包括盘符和路径)。
    __LINE__:当前被编译代码的行号。
    __STDC__:返回编译器是否位标准C,若其值为1表示符合标准C,否则不是标准C.
    __TIME__:当前源程序的创建时间。
  • 决定编译代码 根据"#if"条件决定需要编译的实际代码
  • 删除注释 行注释和块注释

2,编译(gcc -S main.i -o main.s)

  • 对预处理过后的文件进行一系列的词法分析,语法分析,语义分析以及进行相关的优化,生成相应的汇编代码文件

3,汇编(gcc -c main.c -o main.o)

  • 将编译过的汇编代码翻译成目标机器指令的过程

4,链接(ld)

  • 将不同部分的代码和数据收集和组合成为一个单一文件的过程,将相关目标指令文件链接,使其成为一个整体可以被OS执行
  • 连接器ld将各个目标文件组装在一起,解决符号依赖,库依赖关系,并生成可执行文件
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • pwd返回了根目录 这时候看到系统返回了一个 /,这个 / 被我们称为系统的 根目录(root),这个位置也就是我...
    夏威夷的芒果阅读 4,338评论 0 1
  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 12,385评论 0 27
  • 前言:C语言是Java、Objective-C、C++等高级语言的基础、也是跨平台开发的基础,指针是C语言的重中之...
    androidjp阅读 5,616评论 8 39
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,722评论 19 139
  • 一句“我喜歡你”,在心裡放了許久許久,鼓起勇氣許多次,還是說不出口,害怕失敗連朋友都沒得做。 暗戀本身就是充滿猶豫...
    帶風走路deFENG阅读 1,183评论 0 1