C程序是由函数组成的,函数是程序的基本模块,通过对函数模块的调用实现特定的功能。
函数从定义的角度可分为库函数和用户自定义函数。
- 库函数:编译器提供的可在C源程序中调用的函数。一类是C语言标准库规定的库函数,一类是编译器提供的库函数。不同的编译系统提供的库函数数目和函数名以及功能并不完全相同。
- 用户自定义函数:用户把自己的算法编成一个个相对独立的函数模块,通过调用的方法来使用函数。
1.函数的一般形式:
函数类型 函数名(参数类型 参数名)
{
函数体;
}
- 函数名是用户定义的标识符,代表函数的首地址。
- 函数类型即函数返回值的类型,默认为int型。
- 无参函数,函数名的括号中一般为void。
2.有参有返回值的函数:
- 实参可以是常量、变量或表达式。
- 在函数被调用之前,形参不占用内存,必须指定形参的类型。
- 实参对形参的数据传递是值传递,即单向传递。
- 用return语句返回值,不指定函数类型,默认返回整型值。
3.函数的声明:
- C语言编译系统是从上网下编译源文件的。
- 被调函数放在主调函数后面,前面就该有声明,不然C由上网下的编译系统将无法识别。
- 函数声明是对调用函数的说明,已通知系统在其他函数中所调用的函数是什么类型,并宣告自己的存在。
- 函数声明与定义的区别:
函数定义:是指对函数功能的确定,指定函数名、函数返回值类型、参数类型、参数名、函数体。
函数声明:只对已定义的函数进行说明,指定函数名、函数返回值类型、参数类型。
5. 函数声明须注意:
-
-
- 主调函数与被调函数在同一个文件中,若被调函数在主调函数之前定义,可以不用声明。
- 主调函数与被调函数不在同一个文件中,调用前必须进行函数声明,加入关键字extern。
- 库函数的声明:使用库函数必须包含相应的头文件。
- 一个函数只能被定义一次,但可以声明多次。
- 变量声明时不能进行初始化。
- 声明时必须在末尾加上分号“;”。
-
4.多文件函数:将不同功能的函数单独分开,在相应的源文件中定义,在需要的时候,把它与主调函数的主程序代码一起编译,达到代码重用的效果。
不同文件的声明有两种方式:直接声明法、头文件声明法。
直接声明法:把函数声明直接放在每个使用该函数的源文件中,函数调用简单时建议使用。
main.c #include <stdio.h> extern int max(int x,int y); extern int min(int x,int y); int main(int argc, char *argv[]) { int a = 10,b = 20,max_num,min_num; max_num = max(a,b); min_num = min(a,b); printf("max_num = %d\n",max_num); printf("min_num = %d\n",min_num); return 0; } fun.c int max(int x,int y) { return x>y?x:y; } int min(int x,int y) { return x<y?x:y; }
头文件声明法:把函数声明放在头文件中,在主函数中包含相应的头文件,函数调用关系复杂时推荐使用。
main.c #include <stdio.h> #include "fun.h" int main(int argc, char *argv[]) { int a = 10,b = 20,max_num,min_num; max_num = max(a,b); min_num = min(a,b); printf("max_num = %d\n",max_num); printf("min_num = %d\n",min_num); return 0; } fun.c int max(int x,int y) { return x>y?x:y; } int min(int x,int y) { return x<y?x:y; } fun.h extern int max(int x,int y); extern int min(int x,int y);