C语言-内部函和外部函数

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   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声明

c语言打开外部doc文件,C语言-内部函和外部函数.doc相关推荐

  1. 易语言打开C盘文件,易语言教程磁盘操作目录相关

    目录操作是我们常常用到的命令:包括取运行目录,创建目录,取当前目录,改变目录,删除目录,浏览文件夹. 目录操作是我们常常用到的命令 系统核心支持库---磁盘操作(目录) 新命令 1.取运行目录()-- ...

  2. 【C】C语言打开,读取文件

    文章目录 C语言打开,读取文件 一.明明白白我的心 二.代码飞起来 三.过程不重要,重点看结果 C语言打开,读取文件 一.明明白白我的心 1.gcc编译C语言代码        2.winds10操作 ...

  3. C语言打开中文路径文件

    如何用C语言打开Windows下中文路径文件? 虽然不清楚原理,但我今天确实找到一种方法. 1.先编写C语言程序,里面有你的想要打开的带中文路径的文件的逻辑,fopen函数的字符串中就直接用你想要打开 ...

  4. c语言的所有头文件,C语言所有头文件.doc

    C语言所有头文件 C语言所有头文件 stdlib.h包含了很多标准函数和标准宏定义,比如NULL, EXIT_SUCCESS等. ctype.h包含了很多类型定义 string.h包含了字符串操作相关 ...

  5. c语言打开一个html文件路径,C语言文件处理 -C语言文件的打开和关闭

    C语言中,打开文件就是将其从外部存储器调入内存,并定义一个文件指针指向该文件,进而实现用指针对文件的读写操作(见图 1a) ). 图 1:文件的打开与关闭 使用 fopen( ) 函数打开文件的格式如 ...

  6. c语言程序设计实验13文件,C语言程序设计实验指导书

    C语言程序设计实验指导书 C 语言程序设计实验指导书 C 语言程序设计实验指导书 实验一:C语言的运行环境及运行 C 程序的方法(2 学时) 一.实验目的和要求:一.实验目的和要求: (1)了解所用的 ...

  7. r语言x%3c-读取文件,R语言读写最灵活的文件——txt文件

    星爷 R语言可以读取很多文件,其中以txt文本文件最为灵活,为什么呢,txt文件可以以任意符号作为分隔符,比如",","\t",空格,甚至`"--&a ...

  8. c语言处理单色bmp文件,C语言处理单色BMP文件

    使用C 语言获得黑白BMP文档的参数而不使用其他函数. 使用C处理单色BMP照片 首先要了解BMP文件的格式: BMP图片的扫描方式 是从左到右,从下至上,对每个像素取值.一个扫描行所占的字节数为4的 ...

  9. android获取内部存储卡里的文件,获取Android内部存储(外部SD卡)和扩展存储卡(TF卡)的路径...

    获取Android内部存储(外部SD卡)和扩展存储卡(TF卡)的路径 获取Android内部存储(外部SD卡)和扩展存储卡(TF卡)的路径 sd卡存储外部存储卡路径外部存储卡外部存储卡路径内置存储卡外 ...

最新文章

  1. windows优化大师怎么用_怎么在电脑上添加一款好用的提醒便签软件?
  2. 从概念到应用,终于有人把数据挖掘讲明白了
  3. python语言做法_python学习笔记(十六)
  4. maven引用公共包_Maven项目怎样引用其他项目/或者jar包-阿里云开发者社区
  5. javascript 查看变量类型
  6. 颜宁问4对科研夫妻:男科学家怎样平衡事业家庭?
  7. WinForms和XNA
  8. PD快充协议JD6606S资料
  9. 优化iphone存储空间,以及优化iphone内存。
  10. 关于echart 饼图显示不出来 挖坑总结
  11. 在64位ubuntu gcc 编译 -m32报错
  12. “OXO”历史上最早开发的电子游戏——游戏编年史
  13. 赛迪顾问看好中国信息安全市场稳步发展
  14. 第5次作业+160+曾元鹏
  15. 01_行销(Marketing)里的有用的KPI-转换率 (Conversion Rate)
  16. C#桌面办公应用-工资管理系统系列五
  17. Unity台北場優化分享 达哥 讲 Unity优化
  18. 团队建设管理培训 (2)PPT模板
  19. Xshell与Xftp链接
  20. 神经网络结构搜索NAS简述

热门文章

  1. OData metadata 定义中,entity type key 的作用是什么
  2. 关于 Node.js 应用里使用 winston 进行日志记录的最佳实践
  3. SAP Spartacus b2b 页面 popover append to body与否的不同行为
  4. SAP Spartacus lock focus Directive的工作原理示意图
  5. SAP Spartacus默认的货币列表currency是从源代码什么地方读取的
  6. Angular里的购物车页面实现
  7. 使用SAP WebIDE开发SAP Fiori Worklist应用消费OData服务
  8. 使用SAP CRM中间件XIF(External Interface)一步步创建服务订单
  9. why we see different http status code like 404, 500. where are they handled
  10. SAP Fiori launchpad的PageChipInstance实现