程序的预编译,编译,汇编,链接过程

本文详细介绍了程序从预编译、编译、汇编到链接的完整过程。预编译处理预编译指令,如宏定义和#include。编译阶段涉及词法分析、语法分析、语义分析和优化,生成中间代码。汇编阶段将汇编代码转换为机器指令。最后,链接阶段完成符号决议、地址分配和重定位,确保各模块正确链接。
摘要由CSDN通过智能技术生成

预编译过程:

这里写图片描述

预编译过程主要处理那些源代码文件中的以”#”开始的预编译指令。比如:”#include”,”#define”等,主要处理规则如下:
(1)将所有的”#define”删除,并且展开所有的宏定义。
(2)处理所有条件预编译指令,
比如”#if”,”#ifdef”,”#elif”,”#else”,”#endif”.
(3)处理”#include”预编译指令,将被包含的文件插入到该预编译指令的位置。注意:这个过程是递归进行的,也就是说被包含的文件可能还包含其他文件。
(4)删除所有注释”//”和”/**/.
(5)添加行号和文件名标识,比如#2 ”hello.c” 2,以便与变异是编译器产生条使用的行号信息以及用于编译时产生编译错误或警告时能够显示行号。
(6)保留所有的”#pragma”编译器指令,因为编译器需要使用它们。
经过编译后的.i文件不包含任何宏定义,因为所有的宏定义都已经展开,并且包含的文件也已经被插入到.i文件中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值