设计两个函数相互调用C语言,C 与 C++ 接口函数相互调用的实现

一、C 或 C++ 编译的四个步骤

(一) 预处理

在该步骤中,编译器将源程序中以“#”开头的语句进行处理。其中,#include 的原理是将目标文件内容导入本文件。

(二) 编译

在该步骤中,编译器将第一步生成的各个文件分别转换成汇编语言文件。在该过程中,所有函数的名称都会被转换成一个符号作为汇编文件中的唯一标识,对 C 语言函数一般直接用函数名称作为其唯一标识的符号,而对于 C++ 函数在多数情况下需要在函数名称加上各种前缀或后缀才能作为其标识,比如函数 void Print(int num),如果编译器将其视为 C 语言编译,则该函数在汇编文件中的符号为 Print,若视为 C++,则其符号可能为 Print_int(在 gcc 或 g++ 中函数名称的改变还会考虑命名空间等因素),这也是 C++ 支持函数重载的原因。

(三) 汇编

在该步骤中,编译器将第二步生成的各个文件分别转换为二进制文件,但还不是可执行文件。

(四) 链接

在该步骤中,编译器会为第三步生成的每一个文件“穿针引线”,比如 main() 函数中调用了 Print() 函数,还不知道 Print() 函数在哪里,而在 Print() 函数主体所在的那个文件中,已经标明了 Print() 函数的地址,所以编译器会在 main() 函数中调用 Print() 函数的地方标注 Print() 函数的地址,为程序执行过程中的地址跳转提供目标地址,而编译器能做到这一步的前提,是 main() 函数中 Print() 函数的标识,和 Print() 函数主体所在的那个文件中 Print() 函数的标识

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值