函数声明(Function Declarations) ●函数调用时有可能编译器找不到函数的相关信息: #include <stdio.h> int main(void){ double x=1.0,y=2.0; printf ("Avg.of %g and %g:%gIn",x,y, average(x,y)); return 0; double average(double a,double b){ return (a b)/2; 第一次调用average()时,发现找不到该函数的信息,编译器并不报错, 而是假定该函数返回整型量,该编译器的隐含行为称为函数的隐式声明 (implicit declaration)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 函数声明 (Function Declarations) 函数调用时有可能编译器找不到函数的相关信息: #include <stdio.h> int main(void) { double x=1.0, y=2.0; printf("Avg. of %g and %g: %g\n", x, y, average(x, y)); return 0; } double average(double a, double b) { return (a + b) / 2; } 第一次调用 average() 时,发现找不到该函数的信息,编译器并不报错, 而是假定该函数返回整型量,该编译器的隐含行为称为函数的隐式声明 (implicit declaration) 16 / 47
函数声明(续) ●编译器同样没法检查是否向average传递了正确数目的参 数,也无法判断传递参数的类型是否正确 ·编译器会根据传递的参数进行隐式的类型提升 。当最终编译器遇到函数的正式定义时,发现average的返 回值是double,而不是隐式的int,因而报错 ·解决上述问题的一个方法是将函数的定义放在函数调用之 前,但这不是总能办到,即使勉强做到,程序的书写顺序也 不自然,难以理解 ●C的解决方案是函数需要先声明后使用 ·函数声明预先提供给编译器关于该函数的关键信息,包括参 数类型、返回值等 ●函数声明的一般形式:return-type function-name parameters ) ·函数的声明与函数的定义必须一致 17/47
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 函数声明 (续) 编译器同样没法检查是否向 average 传递了正确数目的参 数,也无法判断传递参数的类型是否正确 编译器会根据传递的参数进行隐式的类型提升 当最终编译器遇到函数的正式定义时,发现 average 的返 回值是 double,而不是隐式的 int,因而报错 解决上述问题的一个方法是将函数的定义放在函数调用之 前,但这不是总能办到,即使勉强做到,程序的书写顺序也 不自然,难以理解 C 的解决方案是函数需要先声明后使用 函数声明预先提供给编译器关于该函数的关键信息,包括参 数类型、返回值等 函数声明的一般形式: return-type function-name ( parameters ) ; 函数的声明与函数的定义必须一致 17 / 47