预处理(从源文件到可执行程序(二进制)的过程)

程序运行需要将  源代码->二进制   计算机只能执行二进制的指令

就需要翻译环境,进行如下步骤

每个文件都单独编译,生成.obj文件

每个阶段(预编译    编译     汇编)都干了如图所示的事情 

预处理(预编译)完成了一些文本操作,头文件的包含,定义符号(#define)直接替换,宏,注释删除

条件编译在预处理(预编译)阶段完成 

编译阶段记录各个.c文件的符号:如全局变量,函数名,像局部变量是不关心的。

汇编  生成各自的符号表,在链接 阶段  合并每个文件的符号表和符号表的重定位

如果找不到正确的Add 的符号,就会发生链接错误

 链接期间 通过符号表中的地址 对跨文件的符号进行查找,如果没有就报错,这就是符号表作用

这就是从源文件到可执行程序(二进制)的过程

附:根据符号表汇总合并的逻辑,函数在不同文件中即使不声明也可以使用,但编译器会报警告

如果不声明全局变量,编译器会报错,综合来说,不管是全局变量还是函数,在使用前都需要声明

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值