内部函数和外部函数
标签: C语言
学习人数: 13.9k

函数本质上是全局的,因为一个函数要被另外的函数调用,但是,也可以指定函数只能被本文件调用,而不能被其他文件调用。根据此特点,将函数分为内部函数和外部函数。


内部函数

如果一个函数只能被本文件中其他函数所调用,它称为内部函数。在定义内部函数时,在函数名和函数类型的前面加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...

登录查看完整内容


课后作业

掌握本节内容


登录后开始许愿

暂无评论,来抢沙发