1.extern用法总结

在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声明哪个函数。

这样做的一个明显的好处是,会加速程序的编译(确切的说是预处理)的过程,节省时间。在大型C程序编译过程中,这种差异是非常明显的。

(3)extern修饰符可用于指示C或者C++函数的调用规范

比如在C++中调用C库函数,就需要在C++程序中用extern “C”声明要引用的函数。

这是给链接器用的,告诉链接器在链接的时候用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.共享库部分 sanf.c #include <stdio.h> int a; void hello() ...

  4. extern 用法详解

    在C语言中,修饰符extern用在变量或者函数的声明前,用来说明"此变量/函数是在别处定义的,要在此处引用".(extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文 ...

  5. 一文彻底搞懂extern用法

    一.定义和声明的区别 声明:用来告诉编译器变量的名称和类型,而不分配内存,不赋初值. 定义:为了给变量分配内存,可以为变量赋初值. 注:定义要为变量分配内存空间:而声明不需要为变量分配内存空间. 二. ...

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

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

  7. C/C++中 extern用法

    一.定义和声明的区别 声明用来告诉编译器变量的名称和类型,而不分配内存,不赋初值. 定义为了给变量分配内存,可以为变量赋初值. 注:定义要为变量分配内存空间:而声明不需要为变量分配内存空间. 二.ex ...

  8. C# 关键字extern用法

    C# 关键字extern用法 修饰符用于声明在外部实现的方法.extern 修饰符的常见用法是在使用 Interop 服务调入非 托管代码时与 DllImport 属性一起使用:在这种情况下,该方法还 ...

  9. const和extern用法

    1.什么是const?    常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的.(当然,我们可以偷梁换柱进行更新:) 2.为什么引入const? const 推出的初 ...

最新文章

  1. event对象(触发机制)
  2. WebRTC内置debug工具,详细参数解读
  3. Java利用POI生成Excel强制换行
  4. 图解TC++3.0开发教程
  5. sublime ctags的安装使用方法
  6. mysql全局变量 error_记录——node-mysql连接池遇到的全局变量问题
  7. guid会重复吗_知网查重会查重表格吗
  8. 杜克大学计算机硕士要几年,2017杜克大学春季不招计算机专业的硕士?
  9. LeetCode 1041. 困于环中的机器人
  10. 吴恩达《机器学习》学习笔记一——初识机器学习
  11. QT_Astyle 代码管理工具
  12. 问题的提出方式。(【先】说出最关键的【结果】,然后再描述细节)
  13. 微信小程序云开发教程-云函数操作数据库-增、查
  14. AspnetCore 缓存篇
  15. LinuxC网络编程
  16. 完全二叉树的高度为什么是对lgN向下取整
  17. uniapp小程序分享转发功能
  18. 使用gihub搭建个人博客
  19. Prompt+对比学习,更好地学习句子表征
  20. matlab 4轴机器人建模,SCARA机器人运动学分析及MATLAB建模仿真.pdf

热门文章

  1. iphoneX面部识别带来的隐私问题
  2. PGL 系列(七)metapath2vec
  3. css自定义字体的使用
  4. mysql复制表的几种方式
  5. 13款PHP开发框架,可供不同的移动后台开发者使用!
  6. GitGUI出现 Unable to obtain your identity
  7. MFC 使用三点画弧
  8. 类神界原罪2的摄像机控制——Unity随手记(2020.10.29)
  9. iPadOs中键盘手势大全
  10. 中国千年潜规则,人情世故每天懂一点