C语言中的函数-函数的声明和嵌套-学习笔记-16

函数声明

前面我们说,要使用一个函数必须经过两个步骤,声明函数和定义函数,现在我们来讲讲函数的声明。

1
2
3
4
5
6
#include <stdio.h>
int main(){
int max ( int x, int y); //这里就是对 max 自定义函数的声明
......
return 0
}

上面我们声明了一个函数,函数的名字叫做 max ,返回值类型为 int ,含有两个参数,两个参数的类型都是 int 型。将这些信息告诉编译器之后,编译器就能知道 max 的作用了。

注意
函数声明需要在主调函数内进行,但是如果已经在之前(主调函数前)声明的函数,第二次调用时,不用再次声明。
总之,原则就是,先定义再使用,如果后定义,那就先声明再使用。声明之后,声明位置之后的函数再次调用,不必再次声明。

调用函数的三要素

如果一个函数要调用另一个函数,即一个函数能被调用的三要素是:

  1. 被调用的函数一定是已经定义过的函数,可以是自定义函数也可以是库函数。
  2. 使用库函数的时候,要使用#include指令将调用函数库的有关信息包含到本文件中来。例如#include <math.h>这就是将数学函数库引入到了源程序中,math.h文件包含了对数学函数的声明。
  3. 使用用户自定义函数时,而该函数的位置在主调函数的后面时(就是同一个文件,自定义函数写在了主调函数后面),应该在主调函数中对被调用的函数进行声明

举个例子

我们设计一个简单的加法计算器,然后看看自定义函数的调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
int main(){
float plus (float a, float b);
float x, y;
printf("请输入需要相加的两个数:\n");
scanf("%f %f",&x,&y);
printf("%f+%f的结果是%f\n",x,y,plus(x,y));
return 0;
}

float plus(float a, float b){
float z;
z=a+b;
return (z);
}

我们看到 plus 函数在 main 函数下面,所以我们在 main 函数中要声明 plus 函数,否则在第 7 行的时候,编译器会疯掉,因为不知道从哪蹦出来个 plus 函数,里面还有俩参数,如果我们提前声明,那么编译器就知道通过 plus 函数名去后面找对应的函数了。
下面我们定义了 plus 函数,第一行我们称作函数的首行,如果吧首行加上一个分号,就变成了函数的声明,我们把函数的首行(函数的首部)称为函数原型 (function prototype)

为什么用首行作为函数声明呢?
这是为了在声明时,编译器就可以检查函数类型、函数名、参数、参数类型等信息是否有错。实参和形参的类型是否一直,不一致按照形参进行转换。

函数定义和声明的区别

函数定义和声明不是一回事函数定义主要是其功能性的确立,是由函数类型、函数名、参数类型、参数名、函数体共同组成的一个函数整体。但是函数声明主要是把函数的有关信息通知编译系统

函数的嵌套

前面我们说过,在 C 语言中函数定义是平行的、独立的,也就是说,在一个函数内,不能定义另一个函数,main 函数也是如此。所以函数只能相互调用,不能相互定义。

举个例子

利用函数嵌套,来判断输入的 4 个数中最大的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
int main(){
int a,b,c,d;
int max4(int w, int x ,int y, int z);
// 声明了 main 函数要用到的 max4函数
printf("请输入需要比较的4个数:\n") ;
scanf ("%d %d %d %d",&a,&b,&c,&d);
printf("在%d %d %d %d中,最大的是:%d\n",a,b,c,d,max4(a,b,c,d));
// 这里就是使用的刚才生命的函数
return 0;
}

int max4( int w, int x ,int y,int z){
int max2(int i, int k);
//声明了 max4 函数一会儿要用到的 max2 函数
return(max2(max2(w,x),max2(y,z)));
// 使用了刚才生命的 max2 函数
}

int max2(int i , int k){
int z;
z=i>k ? i : k;
return (z);
}

我们先看一下调用顺序是:
main 函数调用 $\rightarrow$ max4 函数3次调用 $\rightarrow$ max2 函数
声明顺序:
因为 main 函数用到 max4函数,所以要声明,main 没有调用 max2 函数,所以不用声明。
max4 函数用到了 max2 函数,所以要声明。

函数嵌套的注意事项

从上面的例子我们不难看出,函数之间可以相互调用,如果在主调函数需要调用自定义函数时,一定要遵循先声明再使用的原则,如果主调函数用不到该函数,则不必声明,之前已经声明的函数,之后使用就不必声明了。

尾巴

这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。


-------------The End-------------
欢迎请我喝咖啡哦~!