Question 3 - C程序编译的步骤

1. 编译步骤

1.1 预处理

* 宏定义展开
* 头文件展开
* 条件编译等
* 将代码中的注释删除
* 不会检查语法

1.2 编译

* 检查语法,将预处理后文件编译生成汇编文件

1.3 汇编

* 将汇编文件生成目标文件(二进制文件)

1.4 链接

* C语言写的程序是需要依赖各种库的,所以编译之后还需要把库链接到最终的可执行程序中去

2. 编译命令

* 预处理:`gcc -E hello.c -o hello.i`
* 编  译:`gcc -S hello.i -o hello.s`
* 汇  编:`gcc -c hello.s -o hello.o`
* 链  接:`gcc    hello.o -o hello`
选项含义
-E只进行预处理
-S只进行预处理和编译
-c只进行预处理、编译和汇编
-o file指定生成的输出文件名为file
文件后缀含义
.cC语言文件
.i预处理后的C语言文件
.s编译后的汇编文件
.o编译后的目标文件

3. 简单的例子

#include <stdio.h>
#define TIMESTAMP 20221020
int main()
{
#if 0
	printf("this line won't be printed\n");
#endif

// annotation won't be compiled
/* same */
#if 1
	printf("this line will be printed\n");
#endif
	printf("hello world %d\n", TIMESTAMP);
	return 0;
}
gcc -E hello.c -o hello.i

可以看到生成的.i文件

  1. #会将后面的文件都copy到预处理文件中
  2. .I文件最后的截图
    在这里插入图片描述
gcc -S hello.i -o hello.s

.s文件生成的是汇编文件

gcc -c hello.s -o hello.o

.o文件是二进制文件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值