在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。

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程序编译完成后在目标代码中命名规则不同。

C语言中的extern关键字用法相关推荐

  1. c语言中extern关键字_了解C语言中的extern关键字

    c语言中extern关键字 In this article, we'll take a look at understanding the extern keyword in C. 在本文中,我们将了 ...

  2. JAVA语言中的this关键字用法

    this关键字的三种用法: 通过this关键字可以明确的访问一个类的成员变量,解决成员变量与局部变量名称冲突问题. 实例: public class Student {//定义四个成员变量String ...

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

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

  4. c语言中rand()的作用,c语言中的rand()函数用法

    rand() rand()函数作用:用来产生随机数,但是,rand()的内部实现是用线性同余法实现的,是伪随机数,由于周期较长,因此在一定范围内可以看成是随机的. rand()函数返回:返回一个范围在 ...

  5. c语言中extern变量,C语言中的Extern用法

    C语言中的Extern用法 (2010-07-28 12:50:39) 标签: 杂谈 分类: 技术 C语言中的Extern用法 网上有很多帖子问C语言中Extern的用法,而且回答的详细程度各尽不同. ...

  6. python语言中with as的用法使用详解

    本篇文章主要介绍了python语言中with as的用法使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 With语句是什么? 有一些任务,可能事先需要设置,事后做 ...

  7. c语言中ANSI标准的关键字,C语言中32个关键字详解

    C语言中32个关键字详解 由 ANSI 标准定义的 C 语言关键字共32个,根据关键字的作用,可以将关键字分为数据类型关键字和流程控制关键字两大类. 一.数据类型关键字 A 基本数据类型(5个) vo ...

  8. c语言程序关键字是什么,C语言中32个关键字详解

    C语言中32个关键字详解 由 ANSI 标准定义的 C 语言关键字共32个,根据关键字的作用,可以将关键字分为数据类型关键字和流程控制关键字两大类. 一.数据类型关键字 A 基本数据类型(5个) vo ...

  9. 在c语言中for的作用,c语言中for语句的用法

    C语言语言中FOR的用法 for 是一个循环语句,和while是类似的,for一般的用法有: for(i=0;i<10;i++) { printf("hello world" ...

最新文章

  1. HDFS组件性能调优:数据平衡
  2. 互联网金融产品需要什么样的产品经理?
  3. linux 修改jmeter内存溢出,jmeter本机内存溢出如何修改?
  4. 【POJ - 3694】Network(对dfn求lca 或 缩点+lca 或 边双连通+并查集)
  5. 嘉汇舞台工程材料列表(全部自有设备)
  6. LKT系列加密芯片如何预置openssl生成的rsa密钥完成运算(二)
  7. AngularJS app.run()文档?
  8. 用OpenCV检测图像中的长方形画布或纸张并提取图像内容
  9. 定位到文件目录并选定文件
  10. pyside qt for python 在ubuntu下构建依赖
  11. SaaSpace:12种最好的免费甘特图软件工具
  12. 最小 的浏览器 界面最精简 大小只有 压缩后只有7K 多
  13. 北通手柄连接电脑没反应_北通手柄怎么连接电脑
  14. linux软件包管理思维导图,推荐五款管理工具(思维导图)
  15. 游戏实时语音解决方案是怎么炼成的
  16. 快手的未来,没有宿华
  17. java蚂蚁智力题,智力题大全_附答案
  18. java 实现将图片替换到word 文档中
  19. 大一计算机思维知识点,大学计算机—基于计算思维知识点详解.docx
  20. CentOS 6.4下安装和配置Samba - 行知小筑 - 51CTO技术博客

热门文章

  1. OSG的HUD抬头文字显示
  2. 三行代码接入,社交软件打字时底下弹出的表情布局,自定义ViewPager+页面点标+各种功能的android小框架。...
  3. p点到(a,b)点两所在直线的垂点坐标及p点是否在(a,b)两点所在直线上
  4. 按照重复的次数高到低进行排序
  5. IE6/IE7中JavaScript json最后一个键值后不能增加逗号
  6. gnome Nautilus cannot handle computer locations
  7. DataSet RecordSet 互转
  8. 程序员离职带走源码竟获利800万,网友:我一般都是删库跑路
  9. 上传jar到nexus的thirdparty第三方库
  10. XenApp_XenDesktop_7.6实战篇之十四:XenDesktop虚拟桌面的交付