内部函数和外部函数
函数本质是全局的,因为定义一个函数的目的就是要被另外的函数调用。若不回声明,一个文件中的函数既可以被本文件中其他函数调用,也可以被其他文件中函数调用。
根据函数能否被其他源文件调用,将函数分为内部函数和外部函数。
内部函数
只能被本文件中其他函数调用,为内部函数,定义内部函数如下:
static 类型名 函数名(形参表)
,在函数名各函数类型前加static
,static int fun(int a,intb);
fun为一个内部函数,不能被其他文件调用。
内部函数又称静态函数,因为它被static
修饰,不必担心函数是否与其他模块的函数同名。
通常把只能由本文件使用的函数和外部变量放在文件的开头,前面加
static
使之局部化,其他文件不能使用。提高程序的可靠性。
外部函数
定义函数时,函数首部最左端加关键字extern
,声明函数为外部函数,可供其他文件调用。
extern int fun(int a,int b);
C语言规定,在定义函数时省略extern
默认函数为外部函数。在需要调用本函数的文件中需对此函数进行声明,并且声明时要加关键字extern
,表示该函数“是在其他文件中定义的外部函数
file1.c
# include <stdio.h>
int main(){
//对函数进行声明
//void enter_string(char str[]);为函数原型
extern void enter_string(char str[]);
char c ,str[10];
//调用其他文件中声明的enter_string函数
enter_string(str);
}
file2.c
void enter_string(char str[10]){
//向字符数组输入字符串
gets(str);
}
C语言允许在声明函数时省略extern
,所以file1.c中的extern void enter_string(char str[]);
可以写成void enter_string(char str[]);
函数原型的形式。
总结
使用函数原型,能够扩展函数使用域到定义该函数的文件外,而不必使用extern。只需要在使用该函数的每一个文件中包含该函数的函数原型即可。函数原型通知编译系统:该函数在本文件中稍后定义,或在另一个文件中定义。
外部函数头文件中使用较多,包含所需的函数原型及其他有关信息。