目录
- 前言
- 函数定义
- 函数声明
- 为什么要有函数声明
- 原因1:分模块编程
- 原因2:静态库文件
前言
在上文中已经介绍了函数调用,分为传值调用和传址调用,以及嵌套调用和链式访问。在本文中将介绍函数的声明和定义,以及为什么要有函数的声明?
我们先看这么一段代码:
int Add(int x, int y)
{
return x + y;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int result = Add(a, b);
printf("%d", result);
return 0;
}
这段代码是利用一个函数实现加法操作。我们好像没有看到函数声明。不免疑问函数声明真的有必要吗?
函数定义
函数的定义就是函数的具体实现。函数定义是一种特殊的声明。
在前言部分的代码中,函数定义就是:
int Add(int x, int y)
{
return x + y;
}
函数声明
声明,顾名思义就是告诉。函数声明就是告诉编译器有一个函数叫什么,参数是什么,返回类型是什么等等。当然函数声明一定在函数的使用之前,要满足先声明再使用。
在前言部分的代码中没有函数声明。这是因为我们一般将函数定义写在主函数的前面,主函数在最后。如果将函数定义写在主函数的后面,那么在程序前面就需要进行函数的声明。原因如下:程序真正开始执行的时候,编译器会先从最开始往后扫描,扫描到主函数后开始正式编译,函数调用时往往都写在主函数内部,如果你将函数写在了主函数的后面并且在前面没有声明,也就是说编译器在编译的过程中进行到函数调用的部分了,但是它从开始一直扫描到这里的时候都没有见过你要调用的函数在哪里,所以它找不到你的函数在哪里,于是就会报错,就像这样:
这个时候,我们只需要在程序前面进行函数声明就可以了:
一定要注意函数声明结尾要有分号。
为什么要有函数声明
原因1:分模块编程
我们已经了解过函数声明了,难道函数声明就是这样用的吗?我把函数写在主函数前面不就可以了,函数声明不是多此一举?我们认为它是一个规定就行了?
我们想一想,在公司中一个项目不可能只有你一个人进行代码的编写,一般是成百上千的人在写,这个时候所有人都在一个源文件里面写程序,等你写完他写,他写完下一个人写,这要是完成一个产品,不得到猴年马月去了,也容易乱套,甚至出错都不知道是哪的错,是谁写的代码出了错。
公司都是团队协作开发的,所以需要分模块去写,方便协作,最后进行整合。
假设我现在有一个团队,现在要开发一款计算器(假设这个计算器的实现很复杂),要有加减乘除四则运算和其他各种运算。
如果是实现加法操作的程序员就需要编写这样的代码:
最后负责各个模块的程序员写完后将它们整合起来就可以了。
原因2:静态库文件
假设现在你写了一个非常厉害的库,能够实现非常复杂的操作,这个时候某公司非常需要这样的功能,你可以选择把它卖出去挣钱,又不卖源代码,于是你将你写的库的静态库文件(后缀是.lib,打开静态库文件不会出现源代码)和头文件卖给某公司,头文件里可能是几百个函数声明(所以函数的声明一般放在头文件中),让某公司知道这些函数怎么使用。可能该公司还会每年给你多少钱让你对这个进行维护,甚至可能直接重金招聘你。
改成静态库的方法:
公司要使用你的库,就需要在他们编写的文件中导入你的静态库。
#include "add.h" //公司需要使用你卖给他们的头文件
#pragma comment(lib,"add.lib") //导入静态库,假设你写的库就是add