http://blog.sina.com.cn/s/blog_52deb9d50100ml6y.html

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

转载于:https://www.cnblogs.com/davidwang456/p/3543949.html

C语言中extern的用法--转相关推荐

  1. C/C 语言中extern的用法

    声明外部变量 现代编译器一般采用按文件编译的方式,因此在编译时,各个文件中定义的全局变量是互相透明的,也就是说,在编译时,全局变量的可见域限制在文件内部.下面举一个简单的例子.创建一个工程,里面含有A ...

  2. C语言中extern关键字用法

    一. 修饰变量,作为外部变量声明 一句话总结:扩充了全局变量的作用域,外部变量是在函数外部定义的全局变量,它的作用域是从变量的定义处开始,到本程序文件的末尾.如果外部变量不再文件的开头定义,其有效作用 ...

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

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

  4. c语言typedef怎么自定义函数,c语言中typedef的用法

    C语言是一门通用计算机编程语言,应用广泛.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言. 尽管C语言提供了许多低级处理的功 ...

  5. c语言 strcpy作用,c语言中strcpy的用法

    c语言中strcpy的用法的用法你知道吗?下面小编就跟你们详细介绍下c语言中strcpy的用法的用法,希望对你们有用. c语言中strcpy的用法的用法如下: strcpy原型声明:extern ch ...

  6. c语言中getche的用法,c语言中getch的用法

    [www.hywsbj.com--图表展板] getch()函数是无回显的从控制台取得一个字符.以利用getch()函数让程序调试运行结束后等待编程者按下键盘才返回编辑界面,即任意键继续效果.下面小编 ...

  7. C语言中extern关键字的使用

    C语言中extern关键字的使用,直接上代码. file1.c文件 #include<stdio.h> extern long power(int); int A = 2; int mai ...

  8. php indexof的用法,c语言中indexof的用法有哪些

    c语言中indexof的用法有哪些 index在互联网上表示网站的默认主页.一般为 index.html index.htmindex.aspindex.php:另外的默认主页也多用default.h ...

  9. c语言中point的用法_关于C语言Switch语句,先学这些技巧够不够?

    一.C语言中switch的用法 1.switch后面括弧内的[表达式],ANSI标准允许它为任何类型: 2.当表达式的值与某一个case后面的常量表达式的值相等时,就执行此case后面的语句,否则,就 ...

最新文章

  1. 如何看懂一个深度学习的项目代码
  2. 上线随想之2011-03-25
  3. 鹰式价差matlab,震荡市场中的蝶式价差交易
  4. 【Windows 逆向】OD 调试器工具 ( CE 中获取子弹动态地址前置操作 | OD 中调试指定地址的数据 )
  5. 二叉树 二度节点和叶子节点之间的数量关系
  6. JQuery动态执行javascript代码的方法
  7. linux 手动配置ip地址方法
  8. 《魂斗罗:归来》手游子弹中没中,没你想得那么简单!
  9. spring mvc import resource路径问题【最简单的却也是最致命的】
  10. 为了涨薪,我给面试公司看我拿到的offer
  11. [转]使用Git Submodule管理子模块
  12. Node.js中使用pipe拷贝大文件不能完全拷贝的解决办法
  13. C语言谭浩强第三版例题及课后题汇总
  14. 《木乃伊3:龙帝之墓》清晰版无字幕BT下载
  15. 人工智能(4)发展现状及未来趋势
  16. python3 模块 public缀_Python publicsuffixlist包_程序模块 - PyPI - Python中文网
  17. 2020软件测试学习自学路线分享,附完整资料,绝对有用哟
  18. HTML基础--标签VSCode常用快捷方式和插件
  19. 今天分享一个Python游戏:简约飞机模拟器
  20. 计算机专业教务工作总结,计算机系阶段工作总结

热门文章

  1. python pandas 合并数据
  2. set和multiset
  3. 加 解密的c语言程序,c语言程序设计文个件加密解密.doc
  4. kvm linux重置密码,kvm虚拟机操作相关命令及虚拟机和镜像密码修改
  5. linux安装mysql字符_Linux下MySQL的彻底卸载和安装配置字符集
  6. Linux下CMake简明教程(六)动态库和静态库的编译控制
  7. plsql job执行多个存储过程_在Kubernetes的一个Pod内连续依次执行Container
  8. threadlocal内存泄露_ThreadLocal 简介
  9. 页面文件太小无法完成操作_手机上也能轻松完成文件压缩操作,无需软件,可惜知道的人才10%...
  10. 文巾解题 1646. 获取生成数组中的最大值