目录
8.10内部函数和外部函数
函数本质上时全局的,因为一个函数要被另外的函数调用,但是,也可以指定函数不能被其他文件调用。根据函数能否被其他源文件调用,将函数分为内部函数和外部函数。
内部函数
如果一个函数只能被本文件中其他函数所调用,它称为内部函数。在定义内部函数时,在函数名和函数类型的前面加static,即:
static 类型标识符 函数名(形参表);
例如:
static int fun(int a,int b);
内部函数又称静态函数,因为它是用static声明的。使用内部函数,可以使函数的作用域只局限于所在文件,在不同的文件中有同名的内部函数,互不干扰。这样不同的人可以分别编写不同的函数,而不必担心所用函数是否会与其他文件中函数同名。通常把只能由同一文件使用的函数和外部变量放在一个文件中,在它们前面都冠以static使之局部化,其他文件不能引用。
外部函数
(1) 在定义函数时,如果在函数首部的最左端加关键字extern,则表示此函数时外部函数,可供其他文件调用。
如函数首部可以写为:
extern int fun(int a,int b);
这样,函数fun就可以为其他文件调用。C语言规定,如果在定义函数时省略extern,则隐含为外部函数。我们前面所学的都是外部函数。
(2) 在需要调用此函数的文件中,用extern对函数作声明,表示该函数时在其他文件中定义的外部函数。
有一个字符串,内有若干字符,今输入一个字符,要求在程序中将该字符删去。用外部函数实现。
#include<stdio.h>
int main()
{
extern void enter_string(char str[]);
extern void delete_string(char str [],char ch);
extern void print_string(char str[]);
// 以上3行代码均为声明
char c;
char str[80];
printf("请输入str:");
enter_string(str);
printf("\n请输入要删去的字符:") ;
scanf("%c",&c);
delete_string(str,c);
printf("\n输出已删去指定字符的字符串:") ;
print_string(str);
return 0;
}
extern void enter_string(char str[]) //定义外部函数
{
gets(str);
}
extern void delete_string(char str [],char ch) //定义外部函数
{
int i,j;
for(i=j=0;str[i]!='\0';i++)
{
if(str[i]!=ch)
{
str[j++]=str[i]; //将不是输入的ch字符的 存到一个新的数组中
}
}
str[j]='\0';
}
extern void print_string(char str[]) //定义外部函数
{
printf("%s\n",str);
}
声明:本文章为个人学习笔记,资料整理参考谭浩强《C程序设计(第三版)》如有错误,欢迎大家指正!