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. varnish详解3
  2. LeetCode(9) - Palindrome Number
  3. 结构体数组实现的简易学生信息管理系统
  4. Go udp 的高性能优化
  5. 为什么现在是升级到Java 8的最佳时机
  6. java-多线程-一道阿里面试题分析
  7. POJ 3694Network(Tarjan边双联通分量 + 缩点 + LCA并查集维护)
  8. Hibernaate 详解
  9. [ZJOI2007]捉迷藏 (线段树,括号序列)
  10. 1079. Total Sales of Supply Chain (25)-求数的层次和叶子节点
  11. Python Apex 武器自动识别与压枪 全过程记录
  12. JSP程序设计习题4-3.6
  13. QT+PCL 点云学习
  14. 医药行业gsp药店管理软件哪个好用?
  15. 华为路由器配置VRRP
  16. 微信小程序通过公众号(服务号)推送通知或提醒步骤及代码(一,获取推送前所需信息)
  17. Intel CPU发展简史
  18. 从外网到域控(vulnstack靶机实战一)
  19. ORACLE EBS常用表及查询语句(二)
  20. #c拉普拉斯展开求行列式的值

热门文章

  1. 在vue项目中 使用swiper轮播图的关于 在ios中图片白边闪屏踩坑记录
  2. app自定义图标 vue_【分享】在uniapp的nvue和subNVue中添加本地自定义字体/字体图标的方法...
  3. 电脑桌面老是弹出计算机,【已解决】如何快速清除电脑桌面上弹出的广告
  4. 腾讯企业邮箱官网是哪个?腾讯企业邮箱怎么注册?
  5. 目标检测算法——YOLOv5/YOLOv7改进之结合​PP-LCNet(轻量级CPU网络)
  6. (二)MQTT+阿里云实现两个设备之间的通信。
  7. Java中Array和List的相互转换
  8. Linux中查看Tomcat日志输出
  9. Luogu P4101 [HEOI2014]人人尽说江南好(博弈论)
  10. 计算机word显示不全,win7系统电脑打开Word文档内容显示不全或显示空白的解决方法...