- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言内部函数和外部函数(DOC可编).doc
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,则隐含为外部函数。本书前面所用的函数都是外部函数。
(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 studio.h enter-string(char str[80])/定义外部函数enter-string*/{gets(str);} /读入字符串str*/file3.c(文件3)
delete-string(char str[],char ch) /定义外部函数delete-string { int i,j; for(i=j=0;str[i]!=′\0′;i++)if(str[i]!=ch) str[j++]=str[i]; str[j]=′\0′; }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作删除处理。算法是这样的:对str数组的字符逐个检查,如果不是被删除的字符就将它存放在数组中,见图8.21(设删除空格)。从str[0]开始逐个检查数组元素值是否等于指定要删除的字符,若不是就留在数组中,若是就不保留。从图中可以看到,应该使str[0]赋给str[0],str[1][1],str[2][2],str[3][3],然后str[5][4]……请读者注意分析如何控制i和j的变化,以便使被删除的字符不保留在原数组中。这个题目当然可以设两个数组,把不删除的字符一一赋给新数组。但我们只用一个数组,只把不被删除的字符保留下来。由于i总是大于或等于j,因此最后保留下来的字符不会覆盖未被检测处理的字符。最后将结束符‘\0’也复制到被保留的字符后面。
程序中3个函数都定义为外部函数。在main函数中用extern声明在main函数中用到的enter-string、delete-string、print-string是在其他文件中定义的外部函数。通过此例可知:使用extern声明就能够在一个文件中调用其他文件中定义的函数,或者说把该函数的作用域扩展到本文件。extern声明的形式就是在
文档评论(0)