7.11 内部函数和外部函数

        有的函数可以被本文件中的其他函数调用,也可以被其他文件 中的函数调用,而有的函数只能被本文件中的其他函数调用,不能被其他文件中的函数调用。
        函数本质 是全局的。因为定义一个函数目的就是要被另外的函数调用。如果不加声明的话,一个文件中的函数既可以被本文件中其他函数调用,也可以被其他文件中的函数调用。但是,也可以指定某些函数不能被其他文件调用。根据函数能否被其他源文件调用,将函数区分为内部函数外部函数

内部函数

        如果一个函数只能被本文件中其他函数所调用,就称它为内部函数。在定义内部函数时,需要在函数名和函数类型的前面加static,即:
        static  类型名  函数名(形参表)
例如,函数的首行

static int fun(int a,int b)

表示fun是一个内部函数,不能被其他文件调用。
        内部函数又称静态函数,因为它是用static声明的。使用内部函数,可以使函数的作用域只局限于所在文件。这样,在不同的文件中即使有同名的函数,也互不干扰。通常,一个大程序往往分工由不同的人分别编写不同的文件模块,在各人编写自己的文件模块时,不必担心所用函数是否会与其他文件模块中的函数同名。

外部函数

        如果在定义函数时,在函数首部的最左端加关键字extern,则此函数是外部函数,可供其他文件调用。
        如函数首部可以为

	extern int fun(int a,int b)

这样,函数fun就可以为其他文件调用。C语言规定,如果在定义函数时省略extern,则默认为外部函数。
        在需要调用此函数的其他文件中,需要对此函数作声明(不要忘记,即使本文件中调用一个函数,也要用函数原型进行声明)。在对此函数作声明时,要加关键字extern,表示该函数“是在其他文件中定义的外部函数”。
例如:

文件main.c
/*有一个字符串,内有若干个字符,现输入一个字符,要求程序将字符串中该字符删去.用外部函数实现*/
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main()
{
	extern void delete_str(char s[],char);
	char ch,str[40]="zai xu yao diao yong ci han shu de qi t";
	printf("原字符串为      :%s\n",str);
	printf("请输入想要删除的字符:");
	ch=getchar();
	
	delete_str(str,ch);
	printf("删除后的字符串为:%s\n",str);
	system("pause");
	return 0;
}
文件delete.c
void delete_str(char s[],char ch)
{
	int i,j;
	for(i=0,j=0;s[i]!=0;i++)
		if(s[i]!=ch)
			s[j++]=s[i];
	s[j]=0;
}

        在main函数中用到的delete_str是在其他文件中定义的外部函数。通过这个函数可知:使用extern声明就能够在本文件中调用在其他文件中定义的函数,或者说把该函数的作用域扩展到本文件。extern声明的形式就是在函数原型基础上加关键字extern。
        由于函数在本质上是外部的,在程序中经常要调用其他文件中的外部函数,为方便编程,C语言允许在声明函数时省写extern。
        由此可以进一步理解函数原型的作用。用函数原型能够把函数的作用域扩展到定义该函数的文件之外(不必使用extern)。只要在使用该函数的每一个文件中包含该函数的函数原型即可。函数原型通知编译系统:该函数在本文件中稍后定义,或在另一文件中定义。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值