首页 > 编程语言 > 详细

第7章:函数--C++的编程模块

时间:2020-03-05 15:46:51      阅读:56      评论:0      收藏:0      [点我收藏+]

探讨为什么需要函数原型:

// 1.cpp

// 功能:计算两个数的和
int sum(int a, int b)// 函数头
{                    // 花括号围起来的是函数体
    int c = a + b;
    return c;
}
// 2.cpp
int sum(int a, int b);// sum函数原型
int main()
{
    int d = sum(1,2);// 调用sum函数
    return 0;
}
  • 调用函数的时候,为什么需要知道函数头
    • 函数头,描述了接受参数的个数和类型,以及返回值的类型。
    • 函数调用的过程是,首先主调函数向被调函数发送数据,把参数传给被调函数,被调函数收到后,执行自己的代码,处理完成后,向主调函数发数据,把返回值传给主调函数。 数据在计算机中是一串二进制数字,必须指明它的类型,接受方才能理解数据的真实含义。函数头指明了,函数通讯的过程中数据的类型。
  • 2.cpp中调用sum函数,为什么编译器不直接去查看1.cpp中的函数头,而是需要程序员手写提供sum函数原型。
    • 因为C语言支持单独编译,所以.cpp文件不能相互依赖,相当于cpp间,互不可见。编译器在编译2.cpp文件时,无权查看1.cpp的任何内容。
    • C语言编译的过程:首先C编译器把.cpp文件分别编译成.o的二进制文件,然后C连接器把所有的.o文件链接成可以执行的.exe文件。
    • C编译器每次单独编译1个.cpp文件,例如编译2.cpp的时候,并不赖1.cpp中的任何内容。C编译器,发现sum函数调用时,首先尝试在当前cpp中寻找sum函数的定义,发现没有找到,那么编译器就会猜测这个函数可能定义在其他的.cpp中,然后根据函数原型的提示,留下对应的空洞,用来存放函数的地址,继续编译下面的代码,形成1.o文件。然后C连接器根据函数名称,在所有的.o文件中查找匹配的函数,找到后,在预留的空洞上填上真实函数的地址。

技术分享图片

 

第7章:函数--C++的编程模块

原文:https://www.cnblogs.com/xshh/p/12420582.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!