函数本质上是全局的,因为一个函数要被另外的函数调用,但是,也可以指定函数只能被本文件调用,而不能被其他文件调用。根据此特点,将函数分为内部函数和外部函数。
内部函数
如果一个函数只能被本文件中其他函数所调用,它称为内部函数。在定义内部函数时,在函数名和函数类型的前面加static。函数首部的一般格式为
static 类型标识符 函数名(形参表)
如
static int fun(int a, int b)
内部函数又称静态(static)函数。使用内部函数,可以使函数只局限于所在文件。如果在不同的文件中有同名的内部函数,互不干扰。通常把只能由同一文件使用的函数和外部变量放在一个文件中,在它们前面都冠以static使之局部化,其他文件不能引用。
外部函数
(1)在定义函数时,如果在函数首部的最左端冠以关键字extern,则表示此函数是外部函数,可供其他文件调用。
如函数首部可以写为
extern int fun (int a, int b)
这样,函数fun就可以为其他文件调用。如果在定义函数时省略extern,则默认为外部函数。本书前面所用的函数都是外部函数。
(2) 在需要调用此函数的文件中,用extern声明所用的函数是外部函数。
例:输入两个整数,要求输出其中的大者。用外部函数实现。
//file1.cpp(文件1)
#include <stdio.h>
int main() {
extern int max(int,int); //声明在本函数中将要调用在其他文件中定义的max函数
int a, b;
scanf("%d%d", &a, &b);
printf("%d\n", max(a, b));
return 0;
}
//file2.cpp(文件2)
int max(int x, int y) {
int z;
z = x > y ? x : y;
return z;
}
运行情况如下:
7 -34
7
通过此例可知:使用extern声明就能够在一个文件中调用其他文件中定义的函数,或者说把该函数的作用域扩展到本文件。extern声明的形式就是在函数原型基础上加关键字extern。由于函数在本质上是外部的,在程序中经常要调用其他文件中的外部函数,为方便编程,C++允许在声明函数时省写extern。上例 程序main函数中的函数声明可写成
int max(int,int);
这就是我们多次用过的函数原型。由此可以进一步理解函数原型的作用。用函数原型能够把函数的作用域扩展到定义该函数的文件之外(不必使用extern)。只要在使用该函数的每一个文件中包含该函数的函数原型即可。函数原型通知编译系统:该函数在本文件中稍后定义,或在另一文件中定义。
利用函数原型扩展函数作用域最常见的例子是#include命令的应用。在#include命令所指定的头文件中包含有调用库函数时所需的信息。例如,在程序中需要调用s...
掌握本节内容
登录后开始许愿
暂无评论,来抢沙发