程序环境与预处理

 

 

在ANSI C(C语言的标准)的任何一种实现中,存在两种不同环境:翻译环境+执行环境

(1)编译:包括三个步骤:①预处理(预编译)②编译③汇编

①预处理:包括三个文本操作:1.完成头文件的包含 #include

                                                   2.#define定义的符号和宏会被替换

                                                   3.删除注释

// 注意:预处理后会生成一个 .i 文件

②编译:把C语言代码转为汇编代码,包括四步1.语法分析、2.词法分析、3.语义分析、4.符号汇总

//注意:编译后会生成一个 .s文件

③汇编:把汇编代码转为机器指令(二进制代码);且会生成符号表(函数名,全局变量,主函数名...)

//注意:汇编后会生成一个 .o(或者.obj)文件(目标文件),linux时.o,window是.obj

//注意:每个目标文件都会有一张符号表,且.o文件是elf格式,可用readelf工具来读取

(2)链接:把多个目标文件和链接库进行链接(例如:test.o 和 add.o 链接生成a.out可执行程序,linux环境下)

a.out可执行程序也是elf格式

包括两步

1.合并段表(相同段表) 2.符号表的合并与重定位(符号表作用就是为了找到某个符号)(符号就是函数名,全局变量等)

即:链接期间能找到任何符号位置

二.执行环境: 即.exe ->执行结果

运行环境:1.程序载入内存,有操作系统环境下用OS完成,独立环境下手工进行完成,也可能通过手工执行代码完成

2.程序执行开始,调用main函数

3.像执行main()函数,其他函数时会创建一个运行时堆栈,用来存储据变量和返回地址。

4.终止程序:可正常也可意外终止。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值