根据函数能否被其他源文件调用,将函数区分为内部函数和外部函数。
内部函数

如果一个函数只能被本文件中其他函数所调用,它称为内部函数。在定义内部函数时,在函数名和函数类型的前面加 static,即

static 类型名 函数名 (形参表)

例如,函数的首行:

static int max(int a,int b)

内部函数又称静态函数。使用内部函数,可以使函数的作用域只局限于所在文件。即使在不同的文件中有同名的内部函数,也互不干扰。提高了程序的可靠性。
外部函数

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

如函数首部可以为

extern int max (int a,int b)

C 语言规定,如果在定义函数时省略 extern,则默认为外部函数。

在需要调用此函数的其他文件中,需要对此函数作声明(不要忘记,即使在本文件中调用一个函数,也要用函数原型来声明)。在对此函数作声明时,要加关键字 extern,表示该函数是在其他文件中定义的外部函数。

extern类似于Java中的public,增大了作用范围

被extern修饰,只是被声明,没有定义,没有分配存储空间

例如:

extern void enter(char str[]); // 对函数的声明

 file1.c(文件1)#include <stdio.h>static void delete_string(char str[],char ch);
int main()
{extern void enter(char str[]); // 对函数的声明extern void print(char str[]); // 对函数的声明char c,str[100];enter(str);scanf("%c",&c);delete_string(str,c);print(str);return 0;
}static 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];str[j]='\0';
}file2.c(文件2)#include <stdio.h>void enter(char str[100]) // 定义外部函数 enter
{fgets(str, 100, stdin); // 向字符数组输入字符串
}file3.c(文件3)#include <stdio.h>void print(char str[]) // 定义外部函数 print
{printf("%s\n",str);
}输入字符串"abcdef",给字符数组 str,在输入要删去的字符'd'。 运行结果:$ gcc file1.c file2.c file3.c
$ ./a.out
abcdef                   # 输入的字符串
d                        # 要删除的字符
abcef                    # 删除后的字符串

c当中extern详解相关推荐

  1. 11. shell当中read详解,read语法选项,read用法示例,脚本示例,while read line详解,掌握原则

    shell当中read详解,read语法选项,read用法示例,脚本示例,while read line详解,掌握原则 文章目录 1.1 read详解 1.2 用法示例 1.3 while read ...

  2. extern 详解(内有extern C 讲解)

    基本解释: extern可以置于变量或者函数前, 以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义. 此外extern也可用来进行链接指定. 也就是说exter ...

  3. C语言extern详解必懂

    一.首先,extern是关于声明的关键字: 变量的声明有两种情况: 1.一种是需要建立存储空间的.例如:int a 在声明的时候就已经建立了存储空间. 2.另一种是不需要建立存储空间的,通过使用ext ...

  4. c语言全局变量 extern,全局变量和extern详解

    声明与定义 首先讲一下声明与定义 声明不等于定义,声明只是指出了变量的名字,并没有为其分配存储空间:定义指出变量名字同时为变量分配存储空间,定义包含了声明 extern  int  i;  //声明变 ...

  5. extern用法详解(转)

    extern用法详解(转)       1 基本解释 extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义. 另外,extern ...

  6. extern用法详解

    [转]extern用法详解 Posted on 2011-08-16 11:15 单鱼游弋 阅读(98) 评论(0)编辑收藏 1 基本解释 extern可以置于变量或者函数前,以标示变量或者函数的定义 ...

  7. python编译器怎么运行不在路径中的py文件_对python当中不在本路径的py文件的引用详解...

    众所周知,如果py文件不在当前路径,那么就不能import,因此,本文介绍如下两种有效的方法: 方法1: 修改环境变量,在~/.bashrc里面进行修改,然后source ~/.bashrc 方法2: ...

  8. c语言关键字extern作用,C语言中extern关键字详解

    <C语言中extern关键字详解>由会员分享,可在线阅读,更多相关<C语言中extern关键字详解(5页珍藏版)>请在人人文库网上搜索. 1.C 语言中 extern 关键字详 ...

  9. python的对象数组_Python当中的array数组对象实例详解

    计算机为数组分配一段连续的内存,从而支持对数组随机访问: 由于项的地址在编号上是连续的,数组某一项的地址可以通过将两个值相加得出,即将数组的基本地址和项的偏移地址相加. 数组的基本地址就是数组的第一项 ...

  10. 2. 详解awk当中的分隔符,输入分隔符,输出分隔符

    AWK分隔符 awk的默认分割符是空格,awk的分隔符还分为两种,"输入分隔符" 和 "输出分隔符" . 输入分隔符,英文原文为field separator, ...

最新文章

  1. MindInsight训练可视整体设计介绍
  2. WaitForSingleObject的用法详细介绍
  3. 高等数学上-赵立军-北京大学出版社-题解-练习5.6
  4. JAVA基础实例(三)--排序
  5. Nutanix在中国市场发布多云合作伙伴计划
  6. maven项目部署到Repository(Nexus)
  7. wordpress phpmyadmin_wordpress企业主题网站迁移并更换域名方法
  8. [mysql]三种方法为root账户指定密码
  9. android 序列化传参数,Android序列化之Parcelable和Serializable的使用详解
  10. Java项目案例-猜数小游戏和多级菜单系统.....
  11. Web开发牛人访谈:你们都在用什么?
  12. 缺省值及属性(Python)
  13. layui 勾选不联动父项 树形控件_layui树形组件重现勾选过程的办法
  14. Qt高级教程图形视图部分
  15. An internal error occurred during: svn错误
  16. 重庆公需科目快速看视频方法自动学习 python
  17. 写毕业论文期间的一些收获和感想
  18. RPA机器人的6大收益
  19. 3DCAD图纸转2D(DXF)图纸通用解决方案文稿
  20. 三星GT-I9502的USB调试在哪儿

热门文章

  1. 掌握 JS 高级编程基础 - Reflect Metadata
  2. Z600服务器是阵列硬盘,Z600 使用SAS卡,SAS硬盘组Raid 5
  3. 计算机动画原理课程设计选题,组成原理课程设计设计一台模型计算机.pdf
  4. 佛山科学技术学院计算机科学与技术李欣华,第七届国务院学位委员会中文学科评议组2019年度 扩大会议在佛山科学技术学院召开...
  5. 一杯咖啡带你读懂状态机
  6. 消息中间件MQ与RabbitMQ
  7. Flutter Text文本删除线、下划线设置
  8. 【面经】数据开发一面-美团暑期实习
  9. windows系统升级
  10. ORCAD中occurences 和 instances的区别