9.1.1 函数的分类
在C语言中可从不同的角度对函数进行分类,具体说明如下所示。
1.从函数定义的角度来划分
从函数定义的角度来看,函数可分为库函数和用户定义函数两种。
❑ 库函数:由C系统提供,用户无须定义,也不必在程序中进行类型说明,只需在程序前包含有该函数原型的头文件即可在程序中直接调用它。在前面的范例中反复用到的printf、scanf、getchar、putchar、gets、puts、strcat等函数均属此类。
❑ 用户定义函数:由用户按需要编写的函数。用户自定义函数不仅要在程序中定义函数本身,而且在主调函数模块中还必须对该被调函数进行类型说明,然后才能使用。
2.从是否有返回值的角度来划分
从这个角度看,又可以把函数分为有返回值函数和无返回值函数两种。
❑ 有返回值函数:调用此类函数执行完功能后将向调用者返回一个执行结果,它称为函数返回值。数学函数即属于此类函数。由用户定义的要返回函数值的函数必须在函数定义和函数说明中明确返回值的类型。
❑ 无返回值函数:此类函数用于完成某项特定的任务,执行完成后不向调用者返回函数值。这类函数类似于其他语言的过程。因为函数不需要返回值,所以用户在定义此类函数时可指定它的返回值为“空类型”,空类型的说明符为“void”。
3.从是否有参数的角度来划分
从是否有参数角度划分,函数可以分为无参函数和有参函数两种。
❑ 无参函数:在函数定义、函数说明及函数调用中均不带参数。主调函数和被调函数之间不进行参数传送。此类函数通常用来完成一组指定的功能,可以返回或不返回函数值。
❑ 有参函数:也称为带参函数。在函数定义及函数说明时都有参数,它们称为形式参数(简称为形参)。在函数调用时也必须给出参数,它们称为实际参数(简称为实参)。进行函数调用时,主调函数将把实参值传送给形参,供被调函数来使用。
4.库函数
C语言提供了极为丰富的库函数,这些库函数根据具体的功能进行如下分类。
❑ 字符类型分类函数:对字符按ASCII码进行分类,例如分为字母、数字、控制字符、分隔符,大小写字母等。
❑ 转换函数:对字符或字符串进行转换,例如在字符和各类数字量(整型、实型等)之间进行转换;在大、小写之间进行转换。
❑ 目录路径函数:对文件目录和路径进行操作。
❑ 诊断函数:用于内部错误检测。
❑ 图形函数:用于屏幕管理和各种图形功能。
❑ 输入/输出函数:完成输入/输出功能。
❑ 接口函数:用于与DOS、BIOS和硬件间的接口。
❑ 字符串函数:用于字符串操作和处理。
❑ 内存管理函数:用于内存管理。
❑ 数学函数:用于数学计算。
❑ 日期和时间函数:用于日期、时间的转换操作。
❑ 进程控制函数:用于进程管理和控制。
❑ 其他函数:用于其他各种功能。
在C语言中,所有的函数定义(包括main函数在内),都是平行的。也就是说,在一个函数体内,不能再定义另一个函数,即不能嵌套定义。但是函数之间允许相互调用,也允许嵌套调用。习惯上把调用者称为主调函数。函数还可以自己调用自己,这称为递归调用。
main函数是主函数,它可以调用其他函数,而不允许其他函数来调用。因此,C程序的执行总是从main函数开始的,完成对其他函数的调用后再返回到main函数,最后由main函数结束整个程序。一个C程序必须也只能有一个main函数。