在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。(extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义 )

大概extern  用法为如下几种方式:

其主要用法是:

  • 在此文件中声明别的文件的变量时用extern
  • 在cpp程序文件中用到c的库函数时用extern

头文件.h

extern volatile SERV103_LINK servLink;extern YaoXinStrucType *pstYx;static int ycSpace = 500;static int yxSpace = 1000;static int sjbgSpace = 10*1000;static int gzbgSpace = 30*1000;

然后需要在某个.cpp 文件中引用

某一个 .cpp (多个cpp)

iec103_serv_send_sjbg((SERV103_LINK *)&servLink ,sjbgData, 1);

ST_RET iec103_serv_send_zjbg(SERV103_LINK *servLink, SoeItemType *zjbgData, ST_UCHAR sendReason);

说明:我是在不同的cpp 中调用

1. extern修饰变量的声明。举例来说,如果文件a.c需要引用b.c中变量int v,就可以在a.c中声明extern int v,然后就可以引用变量v。这里需要注意的是,被引用的变量v的链接属性必须是外链接(external)的,也就是说a.c要引用到v,不只是取决于在a.c中声明extern int v,还取决于变量v本身是能够被引用到的。这涉及到c语言的另外一个话题--变量的作用域。能够被其他模块以extern修饰符引用到的变量通常是全局变量。还有很重要的一点是,extern int v可以放在a.c中的任何地方,比如你可以在a.c中的函数fun定义的开头处声明extern int v,然后就可以引用到变量v了,只不过这样只能在函数fun作用域中引用v罢了,这还是变量作用域的问题。对于这一点来说,很多人使用的时候都心存顾虑。好像extern声明只能用于文件作用域似的。

函数与变量都一样:(上面的例子就是在函数中使用)

2. extern修饰函数声明。从本质上来讲,变量和函数没有区别。函数名是指向函数二进制块开头处的指针。如果文件a.c需要引用b.c中的函数,比如在b.c中原型是int fun(int mu),那么就可以在a.c中声明extern int fun(int mu),然后就能使用fun来做任何事情。就像变量的声明一样,extern int fun(int mu)可以放在a.c中任何地方,而不一定非要放在a.c的文件作用域的范围中。对其他模块中函数的引用,最常用的方法是包含这些函数声明的头文件。使用extern和包含头文件来引用函数有什么区别呢?extern的引用方式比包含头文件要简洁得多!extern的使用方法是直接了当的,想引用哪个函数就用extern声明哪个函数。这大概是KISS原则的一种体现吧!这样做的一个明显的好处是,会加速程序的编译(确切的说是预处理)的过程,节省时间。在大型C程序编译过程中,这种差异是非常明显的。

3. 此外,extern修饰符可用于指示C或者C++函数的调用规范。比如在C++中调用C库函数,就需要在C++程序中用extern “C”声明要引用的函数。这是给链接器用的,告诉链接器在链接的时候用C函数规范来链接。主要原因是C++和C程序编译完成后在目标代码中命名规则不同。

extern 用法详解相关推荐

  1. extern用法详解(转)

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

  2. extern用法详解

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

  3. C语言中extern用法详解

    在C语言中,修饰符extern用在变量或者函数的声明前,用来说明"此变量/函数是在别处定义的,要在此处引用".  1. extern修饰变量的声明. 举例来说,如果文件a.c需要引 ...

  4. c语言extern的作用6,C语言中extern用法详解

    本文基于VC6.0 编译器 首先文档结构如下: myextern.h和myextern.c中定义extern函数 main.c中定义main方法,调用extern函数 1.第一个尝试: myexter ...

  5. android搜索功能xml,Android_Android ActionBar搜索功能用法详解,本文实例讲述了Android ActionBar - phpStudy...

    Android ActionBar搜索功能用法详解 本文实例讲述了Android ActionBar搜索功能用法.分享给大家供大家参考,具体如下: 使用ActionBar SearchView时的注意 ...

  6. 【转】__declspec用法详解

    __declspec用法详解 __declspec用于指定所给定类型的实例的与Microsoft相关的存储方式.其它的有关存储方式的修饰符如static与extern等是C和 C++语言的ANSI规范 ...

  7. STL中map和string, vector 用法详解

    1. map 用法详解 std map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成 ...

  8. 转: std::string用法详解

    原文地址为: 转: std::string用法详解  C++中的string 类 简单介绍 前言: string 的角色 1 string 使用 1.1 充分使用string 操作符 1.2 眼花缭乱 ...

  9. #ifdef,#else,#endif,#if用法详解(转)

    #ifdef,#else,#endif,#if用法详解(转) 2011-04-22 10:11 预处理就是在进行编译的第一遍词法扫描和语法分析之前所作的工作.说白了,就是对源文件进行编译前,先对预处理 ...

最新文章

  1. Worktile荣登2020中关村国际前沿科技创新大赛大数据与云计算领域TOP10
  2. python maketrans方法
  3. C++ cin.ignore()用法
  4. python编写木马攻击_用Python写一个自动木马程序
  5. nginx 解析php漏洞
  6. sob攻略超详细攻略_2020云南旅游超详细必看攻略(附带云南美食景点攻略)
  7. 最全的Vue3.0新特性预览(翻译)
  8. 软件开发模型、瀑布模型、V模型、原型模型、增量模型、螺旋模型、喷泉模型
  9. 单片机 重要英文缩写解释
  10. 阿里云物联网平台基础
  11. u盘引导不能识别惠普服务器硬盘,如何解决惠普电脑uefi识别不了u盘
  12. 【XSY2538】/【HDU6155】Subsequence Count(矩阵乘法+线段树)
  13. 色温(Temperature)转RGB (JavaScript)
  14. echarts如何在json地图上设置多种颜色的点位和自定义背景弹出框
  15. excel中计算某年某月有多少天(函数:EOMONTH)
  16. python pdfminer读取pdf表格_使用Python中的PDFMiner从PDF文件提取文本?
  17. 研发思维07----嵌入式智能产品安全认证必要经过
  18. vivos11t刷机包 android,步步高vivo S11t一键救砖教程,轻松刷回官方系统
  19. [Vue仿网易云音乐实战]炎炎夏日——放首自己喜欢的歌
  20. QQ2009 暂时无法登陆,请稍候重试 问题解决方法

热门文章

  1. Codeforces Round #787 (Div. 3) F. Vlad and Unfinished Business
  2. python分位数回归模型_GitHub - lei940324/Quantile: 介绍分位数回归,包括分位数Granger因果检验、QVAR及脉冲响应函数...
  3. GIT 修改用户名和密码
  4. 2019-2021届蓝桥杯——java真题集锦
  5. 2021中国5G网络创新论坛议程重磅发布!会议亮点提前看,观众报名进入倒计时!...
  6. Netty ChannelGroup自动移除InActive的Channel实现
  7. 图像质量评价和人脸素描合成
  8. 哈希(哈希表与哈希函数)
  9. mysql错误42000_mysql5.7 异常ERROR 1055 (42000)
  10. 敏涵控股集团董事长刘敏:唱响敏涵之歌 打造世界敏涵