编译、链接学习笔记(一)简述编译链接过程

一直很希望清楚的了解C语言是如何从编写代码到编译、链接成可执行文件,最后执行代码的整个过程。今天开始学习《程序员的自我修养》,并从读书的过程中做一些总结与思考,也希望从中可以将晦涩难懂的概念以我自己的理解以简单的语言总结出来。
书中所用到的例子都是以pc为例子,我也试着从mac与ios的角度试着以类比探究他们三者的区别与相同之处。

源代码的编译过程

源代码从文本,经过编译器的处理最终生成可执行文件的过程中一共经历了四个步骤,分别是预处理(prepressing)编译(compliation)汇编(assembly),和链接(linking)
下图是四个步骤以及对应的生成产物。

这里写图片描述

步骤1 预编译

预编译是整个编译过程最开始的工作,它的工作是做些代码的替换工作,过程中主要处理文件中以#开始的预编译指令,例如引用其他文件#include 、#define宏替换、#pragma等。

gcc编译器中预编译命令

gcc中使用-E选项进行编译可以输出预编译后的结果,结果输出在后缀为i的文件中。

gcc -E hello.c -o hello.i

主要的规则有以下几个
1. #define ,删除#define并展开所有定义,并做宏文本替换
2.#include,将声明的文件插入到指令的位置,而且插入的过程是递归进行的,也就是说会将所有使用到的文件递归引用
3.处理#if、#ifdef 、#else 、#endif等条件预编译指令
4.保留#pragma编译器命令
5.添加行号和文件名标识,比如 #2 “hello.c” 2

下面举一个简单的例子来说明预编译的输出结果。

例子是一个非常简单的c的名为hello.c的源文件,例子中使用到了上面所说的几种预编译命令,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值