LAP
8.10 内部函数和外部函数
函数本质上是全局的,因为一个函数要被另外的函数调用,但是,也可以指定函数
不能被其他文件调用
根据函数能否被其他源文件调用,将函数区分为内部函数和外部函数。
8.10.1 内部函数
如果一个函数只能被本文件中其他函数所调用,它称为内部函数。
在定义内部函数时,在函数名和函数类型的前面加static。即static 类型标识
符函数名(形参表)如:
static int fun(int a,int b)
内部函数又称静态函数。
使用内部函数,可以使函数只局限于所在文件,如果在不同的文件中有同名的内
部函数,互不干扰。这样不同的人可以分别编写不同的函数,而不必担心所用函数
是否会与其他文件中函数同名,通常把只能由同一文件使用的函数和外部变量放
在一个文件中,在它们前面都static使之局部化,其他文件不能引用。
8.10.2外部函数
(1) 在定义函数时,如果在函数首部的最左端冠以关键字extern,则表示此函数
是外部函数,可供其他文件调用。
如函数首部可以写为
extern int fun (int a, int b)
这样,函数fun就可以为其他文件调用。C语言规定,如果在定义函数时省略
extern,则隐含为外部函数。本书前面所用的函数都是外部函数。
LAP
(2) 在需要调用此函数的文件中,用extern声明所用的函数是外部函数。
例8.22
有一个字符串,内有若干个字符,今输入一个字符,要求程序将字符串中该字符删
去。
用外部函数实现。
file1.c (文件1)
main ()
{extern enter-string (char str [80]);
extern delete-strin g (char str [],char ch);
extern print-string(char str []);
//以上3行声明在本函数中将要调用的在其他文件中定义的3个函数
char c;
char str [80];
enter-string (str);
scanf ("%c",&c);
delete-string (str,c);
print-string (str);
}
file2.c (文件2)
#include
enter-string (char str [80])/ 定义外部函数enter-string*/
{gets (str);} / 读入字符串str*/
file3.c (文件3)
delete-string(charstr[],charch) // 定义外部函数delete-string
{int i,j;
for (i=j=0;str [i]!=′\0′;i++)
if (str [i]!=ch)
str [j++]=str [i];
str [j]=′\0′;
LAP
}
file4.c (文件4)
print-string (char str [])/ 定义外部函数print-string /
{
printf ("%s",str);
}
运行情况如下:
abcdefgc (输入str)
c (输入要删去的字符)
abdefg (输出已删去指定字符的字符串)
整个程序由4个文件组成。每个文件包含一个函数。主函数是主控函数,除声明
部分外,由4个函数调用语句组成。其中scanf是库函数,另外3个是用户自己
定义的函数。函数delete-string的作用是根据
给定的字符串str和要删除的字符ch,对str作删除处理。算法