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

1、C 语言中 extern 关键字详解作者:华清远见武汉华嵌 技术支持 曹伟东内容清单:1. 用 extern 声明外部变量(1) 在一个文件内声明的外部变量(2) 在多个文件中声明外部变量(3) 在多个文件中声明外部结构体变量2. 用 extern 声明外部函数3. 总结1 用 extern 声明外部变量 定义:外部变量是指在函数或者文件外部定义的全局变量。 外部变量定义必须在所有的函 数之外,且只能定义一次。( 1) 在一个文件内声明的外部变量 作用域:如果在变量定义之前要使用该变量,则在用之前加 extern 声明变量,作用 域扩展到从声明开始,到本文件结束。例子:#include int。

2、 max(int x,int y);/ 函数提前声明int main(int argc,char *argv )int result;extern int X; / 外部变量声明extern int Y;result = max(X,Y); printf(the max value is %dn,result); return 0;int X = 10;/定义外部变量int Y = 20;int max(int x, int y)return (xy ? x : y);其中,用 extern 声明外部变量时,类型名可以省略。例如, “ extern int X; ”,可以改 写成“ exter。

3、n X ;”。小结:这种用方法简单,实用性不大。( 2) 在多个文件中声明外部变量作用域: 如果整个工程由多个文件组成, 在一个文件中想引用另外一个文件中已经 定义的外部变量时,则只需在引用变量的文件中用 extern 关键字加以声明即可。可见, 其作用域从一个文件扩展到多个文件了。例子:文件 a.c 的内容:#include int BASE=2;/变量定义int exe(int x);/外部函数提前声明int main(int argc, char *agrv)int a=10;prin tf(%dA%d = %dn,BASE,a,exe (a);return 0;文件 b.c 的内容:#。

4、include extern BASE;/外部变量声明int exe(int x)int i;int ret=1;for(i=0;i#include b.h#include c.hA_class local_post=1,2,3;/ 全局变量A_class next_post=10,9,8;/全局变量int main(int argc,char *argv)A_class ret;print(first point,local_post); print(second point,next_post); ret=fun(local_post,next_post);printf(the vecto。

5、r is (%d,%d,%d)n,ret.x,ret.y,ret.z); return 0;文件 b.h 的内容:#ifndef __B_H#define __B_H#if 1typedef structint x;int y;int z;A_class;#endifextern A_class local_post; /外部结构体变量声明extern A_class fun(int x,int y,int z);/接口函数声明#endif文件 b.c 的内容:#include #include b.hA_class fun(A_class first,A_class next)A_class。

6、 ret;ret.x=next.x-first.x;ret.y=next.y-first.x;ret.z=next.z-first.z;return (ret);文件 c.h 的内容:#ifndef __C_H#define __C_Hextern int print(char *,A_class post);#endif文件 c.c 的内容:#include #include b.hint print(char *str,A_class post)printf(%s : (%d,%d,%d)n,str,post.x,post.y,post.z);return 0;禾U用 gcc工具编译 gc。

7、c a.c b.c c.c-o demo, 再运行./demo, 结果为first point : (1,2,3)second point : (10,9,8)the vector is (9,8,5)小结:在a.c文件中定义全局变量A_class local_post结构体,并且调用 b.c中的接口函数 A_class fun(int x,int y,int z)和 c.c 中 int print(char *str,A_class post),在 b.h 中声明外部结构 体变量local_post,同时,需要对其类型 A_class进行实现,在b.h文件中,如果屏蔽掉 A_class 的实。

8、现,而在 b.h 以外的文件中实现,此时编译时就会出错,由于c.c 文件中用到 A_class定义的类型,所以需要在该文件中包含 b.h。这里需要说明的是, 如果调用外部结构体等多层结构体变量时,需要对这种变量进行实现,使用时,加上模块的头文件即可,否则会报错。实际工程中,模块化程序文件,一般提供一个.c和一个.h文件,其中.h文件被.c文件调用, .h 文件中实现。2 用 extern 声明外部函数a 定义函数时,在函数返回值类型前面加上 extern 关键字,表示此函数时外部函数, 可供其他文件调用,如extern int func (int x,int y) , C语言规定,此时 ext。

9、ern可以省略,隐形为外部函数。b 调用此函数时,需要用 extern 对函数作出声明。作用域: 使用 extern 声明能够在一个文件中调用其他文件的函数, 即把被调用函数的作用域 扩展到本文件。 C 语言中规定,声明时可以省略extern。例子:文件a.c的内容:#include #include b.hint main()int x=10,y=5;printf(x = 10,y = 5n);printf(x + y = %dn,add(x,y);printf(x - y = %dn,sub(x,y);printf(x * y = %dn,mult(x,y);printf(x / y = 。

10、%dn,div(x,y);return 0;文件 b.h 的内容:#ifndef __F_H#define __F_Hextern int add(int x,int y);extern int sub(int x,int y);extern int mult(int x,int y);extern int div(int x,int y);#endif文件 b.c 的内容:#include int add(int x,int y)return(x+y);int sub(int x,int y)return(x-y);int mult(int x,int y)return(x*y);int d。

11、iv(int x,int y)if(y!=0)return(x/y);printf(mult() fail!the second para can not be zero!n ); return(-1);禾U用 gcc工具编译 gcc a.c b.c -o demo, 再运行./demo, 结果为x = 10,y = 5x + y = 15x - y = 5x * y = 50x / y = 2。小结:由上面简单的例子可以看出,在b.h文件中声明好b.c的函数,使用时,只需要在a.c中包含#inelude b.h”头文件即可,这样就可以使用b.c的接口函数了,在实际工程中,通常也是采用这种方式。

12、,.c文件中实现函数,.h文件中声明函数借口,需要调用.c文件的函数接口时,只需包含 .h 头文件即可。3. 总结在实际工程中,有两种情况比较多。 一是利用extern只声明外部函数,不需要传递需要 外部声明的变量,一个模块化接口文件对应一个声明接口的头文件,需要调用接口函数时, 只需要包含其头文件。 二是禾用用 extern 声明外部函数, 同时声明需要传递的外部变量, 做 法和第一种情况一样,声明都放在头文件中,但是,模块文件也需要包含该头文件。另外, 如果结构体等比较复杂的变量, 则需要包含其定义的头文件。 另外, 定义的外部变量属于全 局变量,其存储方式为静态存储,生存周期为整个程序的生存周期。

c语言关键字extern作用,C语言中extern关键字详解相关推荐

  1. c语言中funx的作用,c语言中fun用法详解

    C语言中fun用法详解 fun函数是自定义的C/C++语言函数,函数功能多样.该函数名为"函数"英文function的简写,一般在示例和试题中使用,通常在主函数中被调用. C/C+ ...

  2. c语言函数time用法,c语言中time函数详解

    总结: time_t time(time_t *timer); 返回以格林尼治时间(GMT)为标准,从1970年1月1日00:00:00到此刻的本地时间所经过的秒数,time_t实际是个long长整型 ...

  3. java 函数fun_c语言中fun用法详解_后端开发

    Java Dao层的作用_后端开发 Dao层叫数据访问层,属于一种比较底层,比较基础的操作,可以具体到对于某个表或某个实体的增删改查,其Dao层的作用是对数据库的访问进行封装,从而不涉及业务,实现解耦 ...

  4. C语言中const用法详解

    C语言中const用法详解 const修饰普通变量 const作用在于定义一个常量,比如const int a = 10,代表a的值不能被直接修改了,是一个常量,但仍可以通过指针的方式间接修改,如下图 ...

  5. c语言sinx的作用,C语言中 sinx cosx 的用法

    #include #include int main() { double pi=acos(-1.0); double angle; scanf("%lf",&angle) ...

  6. c语言atan的作用,C语言中的atan和atan2

    在C语言的math.h或C++中的cmath中有两个求反正切的函数atan(double x)与atan2(double y,double x)  他们返回的值是弧度 要转化为角度再自己处理下. 前者 ...

  7. sort在c语言中的作用,c语言中sort的用法详解.docx

    c语言中sort的用法详解.docx C语言中SORT的用法详解C语言的学习很多是比较复杂的,那么C语言中SORT的用法的用法你知道吗下面学习啦小编就跟你们详细介绍下C语言中SORT的用法的用法,希望 ...

  8. c语言中{的作用,C语言中Static和Const关键字的作用

    C语言中Static和Const关键字的作用 程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于(堆)中.那么关于C语言中Static和Const关键字的作用,你了解多少 ...

  9. c语言staticint的作用,c语言中static是什么意思?作用是什么

    c语言中static是什么意思?作用是什么 发布时间:2020-04-30 10:07:02 来源:亿速云 阅读:290 作者:小新 今天小编给大家分享的是c语言中static是什么意思?作用是什么, ...

最新文章

  1. 传递给beanshell的参数_jmeter基础之断言及参数的关联性
  2. python 读取二进制数据到可变缓冲区中
  3. [LeetCode] Single Number
  4. C#学习之向量运算符重载
  5. MySQL ALTER TABLE报错Duplicate entry 'xxx' for key 'PRIMARY'解决方法
  6. Linux之gdb基本调试命令与总结
  7. [基础篇]PHP引用变量
  8. matlab的gca和gcf,MATLAB 中gcf、gca 以及gco 的区别
  9. ubuntu安装anaconda3+cuda11.2+cuDNN+pytorch1.7
  10. 双幂数列(C++)M={2^x,3^y|x=0,y=0}
  11. 如何构建超现实元宇宙空间
  12. 浮点数和整数的区别python_浮的部首|浮的拼音|浮的组词|浮的意思 - 查字典
  13. 基于STM32F407的ADC解析-ADC1多通道扫描模式电压采集实验(启用DMA传输数据)
  14. C语言基本语法——循环篇(三种常见的循环)
  15. 助力高效办公,TOM企业邮箱网页版全面升级
  16. 数字电路——与或非逻辑门电路
  17. 最受DBA欢迎的数据库技术文档-巡检篇
  18. matlab6.0哪一年,MATLAB版本与年份间的对应关系
  19. 雕刻效果的实现【OpenCV+QT】
  20. vim 打开文件默认回到上次编辑的地方

热门文章

  1. php 校验 邮政编码,php – 动态邮政编码验证
  2. NO58、对称的二叉树(可以再刷一遍)
  3. JPG格式图片怎么弄?可以试试这些途径
  4. 如何得到tusimple数据
  5. 新版!《信息安全技术 信息安全风险评估方法》解读
  6. 【送书】Preact(React)核心原理详解
  7. python中闭包函数_Python的闭包问题(关于内嵌函数引用闭包函数的变量问题)
  8. C语言:计算1/1-1/2+1/3-1/4+1/5.......+1/99-1/100的值
  9. 问题分析报告--压力环境下运行缓慢
  10. ThinkPHP自定义配置文件