C语言函数声明以及函数原型
这么说吧 大家都知道C语言代码由上到下依次执行,原则上 函数定义 要出现在 函数调用前面,否则就会报错!
可我就是一个不讲原则的人,那么我想在函数定义之前就使用它,并且不想报错。那么我该怎么办?
这时候"函数声明"勇士就出来了,她说摩西摩西不要慌张,有我在没意外!
经过对函数提前"声明",告诉编译器,我要使用这个函数,你现在没有找到他的定义不要紧,请不要报错,稍后我就把定义补上!
就类似你在打游戏的时候,你女票给你发消息说:"xxx我想去干啥/帮我去买个东西",这时你会说过一会 过一会马上去,别生气,我这个搞一下立马就去帮你!
那么 如何 对 函数 进行声明呢?
其实吧 函数声明特别简单,也就是去掉函数定义中的函数体,并且在最后加上分号";"。
如下所示:
dataType kangkang(dataType1 a,dataType b.....);
当然也可以只写数据类型而不写形参拉,如下:
dataType kangkang(dataType1,dataType2...);
那么 函数原型 是什么呀?
就是对函数声明给出与函数有关的信息,如: "函数名"、"返回值类型"、"参数列表(重点是参数类型)"等
函数原型 的作用是什么呢?
其实吧它就是 告诉这个 编译器与函数有关的信息,让编译器知道这个函数是存在的,以及它的存在形式,即使函数暂时没有定义,编译器也知道如何使用它。
这么说吧,有了"函数声明","函数定义"就可以出现在任何地方了,甚至是"其他的文件、静态链接库、动态链接库"等。
//接下来举个例子进行说明吧
eg1: 定义一个函数 sum() 计算m加到n的和,并将sum的定义放到main()后!!!
#include<stdio.h>
//帅气的函数声明登上,它说有我在没意外
int sum(int m,int n); //当然也可以写成 int sum(int,int);
int main()
{
int a=5,b=66;
int result = sum(a,b);//调用sum函数进行计算
printf("The sum from %d to %d is %d\n",a,b,result);
return 0;
}
//进行函数定义(注意看噢,在此之前 主函数已经对函数进行调用操作了噢!)
int sum(int m,int n)
{
int i,sum=0;
for(i=m;i<=n;i++)
{
sum += i;
}
return sum;
}
结果:
The sum from 5 to 66 is 2201
我们在 main() 函数中调用了 sum() 函数,编译器在它前面虽然没有发现函数定义,但是发现了函数声明,这样编译器就知道函数怎么使用了,至于函数体到底是什么,暂时可以不用操心,后续再把函数体补上就行。
//为了加深印象,咱们再举个例子吧!
eg2:定义两个函数计算 1!+2!+...+(n-1)!+n!的和
分析:所定义的函数 一个进行计算阶乘,一个进行计算累加的和
上代码:
#include<stdio.h>
long kangkang(int n);
long kang(long n );
int main()
{
printf("1!+2!+...+10! = %ld\n",kang(10));
return 0;
}
//定义 求阶乘 函数
long kangkang(int n)
{
int i;
long result = 1;
for(i=1;i<=n;i++)
{
result *= i;
}
return result;
}
//定义 累加求和 函数
long kang(long n)
{
int i;
long result = 0;
for(i=1;i<=n;i++)
{
result += kangkang(i);
}
return result;
}
结果:
1!+2!+...+10! = 4037913