C语言:程序的翻译环境

程序环境和预处理

  1. 程序的翻译环境
  2. 程序的执行环境
  3. 详解:C语言程序的编译+链接预定义符号介绍
  4. 预处理指令#define
  5. 宏和函数的对比
  6. 预处理操作符#和##的介绍
  7. 命令定义
  8. 预处理指令#include
  9. 预处理指令#undef
  10. 条件编译

程序的翻译环境

在ANSI C的任何一种实现中,存在两个不同的环境。

第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。

注意:机器指令也就是二进制识别

第2种是执行环境,它用于实际执行代码。

在企业中一个项目组有多名成员完成项目,各写各的.c文件最后通过编译器和连接器完成

我们的项目;

每一个源文件都需要通过编译器翻译成目标文件.obj;所有的.obj文件和链接库共同协作

生成可执行程序.exe

编译器-cl.exe;链接器-link.exe;

组成一个程序的每个源文件通过编译过程分别转换成目标代码(objec code)。每个目标文件由链接器 捆绑在一起,形咸一个单一而完整的可执行程序。

链接器同时也会引入标准C函数库中任何被该程序所用到的函数,而且它可以搜索程序员个人的程序库,将其需要的函数也链接到程序

编译过程包含三个部分:预编译,编译,汇编;

我们的vs编译器属于集成开发环境,我们在编译时看不到具体细节

在gcc环境下可以了解编译的细节处理

预处理

gcc test.c -E(预处理指令) -o(输出) test.i(预处理后生成的文件)

1.头文件的包含

#include包含于程序test.c中预处理文件test.i中将头文件中的内容调出来;

2.define定义符号的替换删除定义的符号

3.注释删除

注释是写给程序员看的,编译器对语法规则了如指掌,预处理会删除注释内容;

4.预处理阶段是对文本进行操作;

编译

gcc test. i -S(gcc环境下对test.i文件进行编译处理就结束)

生成了test.s

把C语言代码转化成汇编代码

语法分析

词法分析

符号汇总(符号汇总只统计全局符号,函数中的局部变量不会统计)

语义分析

汇编

gcc test. s -c

生成了test. o(目标文件)

把汇编代码转换成二进制指令

形成符号表

在编译阶段进行符号汇总后,在汇编阶段对这些符号编号地址;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值