当前位置:嗨网首页>书籍在线阅读

11-函数类型

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

9.1.9 函数类型

声明函数时必须声明函数的类型。带返回值的函数类型应该与其返回值类型相同,而没有返回值的函数应声明为 void 类型。如果没有声明函数的类型,旧版本的C编译器会假定函数的类型是 int 。这一惯例源于C的早期,那时的函数绝大多数都是 int 类型。然而,C99标准不再支持 int 类型函数的这种假定设置。

类型声明是函数定义的一部分。要记住,函数类型指的是返回值的类型,不是函数参数的类型。例如,下面的函数头定义了一个带两个 int 类型参数的函数,但是其返回值是 double 类型。

double klink(int a, int b)

要正确地使用函数,程序在第1次使用函数之前必须知道函数的类型。方法之一是,把完整的函数定义放在第1次调用函数的前面。然而,这种方法增加了程序的阅读难度。而且,要使用的函数可能在C库或其他文件中。因此,通常的做法是提前声明函数,把函数的信息告知编译器。例如,程序清单9.3中的 main() 函数包含以下几行代码:

#include <stdio.h>
int imin(int, int);
int main(void)
{
     int evil1, evil2, lesser;

第2行代码说明 imin 是一个函数名,有两个 int 类型的形参,且返回 int 类型的值。现在,编译器在程序中调用 imin() 函数时就知道应该如何处理。

在程序清单9.3中,我们把函数的前置声明放在主调函数外面。当然,也可以放在主调函数里面。例如,重写 lesser.c (程序清单9.3)的开头部分:

#include <stdio.h>
int main(void)
{
     int imin(int, int); /* 声明imin()函数的原型*/
     int evil1, evil2, lesser;

注意在这两种情况中,函数原型都声明在使用函数之前。

ANSI C标准库中,函数被分成多个系列,每一系列都有各自的头文件。这些头文件中除了其他内容,还包含了本系列所有函数的声明。例如, stdio.h 头文件包含了标准I/O库函数(如, printf()scanf() )的声明。 math.h 头文件包含了各种数学函数的声明。例如,下面的声明:

double sqrt(double);

告知编译器 sqrt() 函数有一个 double 类型的形参,而且返回 double 类型的值。不要混淆函数的声明和定义。函数声明告知编译器函数的类型,而函数定义则提供实际的代码。在程序中包含 math.h 头文件告知编译器: sqrt() 返回 double 类型,但是 sqrt() 函数的代码在另一个库函数的文件中。