C语言进阶第19式:编译过程简介

本文详细介绍了编译的四个阶段:预处理(处理注释、宏定义和#include)、编译(词法、语法和语义分析)、汇编(将汇编代码转换为机器指令)和链接(组合目标文件生成可执行程序)。通过实例展示了编译器如何将C源代码转化为最终的机器代码。
摘要由CSDN通过智能技术生成

问题1:什么是编译?

问题2:编译过程分为哪几个过程?

初识编译器

 

 预编译:

1、处理所有的注释,以空格替代;

2、将所有的#define删除,并且展开所有的宏定义;

3、处理条件编译指令#if, #ifdef, #elif, #else, #endif;

4、处理#include,展开被包含的文件;

5、保存编译器需要使用的#pragma指令;

编译:

----对预处理文件进行词法分析、语法分析和语义分析;

        词法分析:分析关键字、标识符、立即数等是否合法;

        语法分析:分析表达式是否遵循语法规则;

        语义分析:在语法分析的基础上进一步分析表达式是否合法;

----分析结束后进行代码优化生成相应的汇编代码文件。

编译指令示例: gcc -S file.i -0 file.s

汇编

        ----汇编器将汇编代码转变为机器的可执行指令;

        ----每条汇编语句几乎都对应一条机器指令

汇编指令示例:

gcc -c file.s -o file.o

例子:编译示例

#include "19-1.h"

// Begin to define macro

#define GREETING "Hello world!"

#define INC(x) x++

// End

int main()
{   
    p = GREETING;
    
    INC(i);
    
    return 0;
}

总结:

编译过程分为预处理、编译、汇编和链接四个阶段:

        预处理:处理注释、宏以及已经以#开头的符号;

        编译:进行词法分析、语法分析和语义分析等;

        汇编:将汇编语言翻译为机器指令的目标文件;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值