C++中extern是指全局的意思。它一般有两个方面的用途:

1、声明变量

首先说一下声明和定义的区别:

①变量的定义:用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义。

②变量的声明:用于向程序表明变量的类型和名字。定义也是声明:当定义变量时我们声明了它的类型和名字。可以通过使用extern 关键字声明变量名而不定义它。例如:

extern int i; //声明一个变量i,但是并没有定义
int i; //声明并且定义了一个变量i

extern 声明不是定义,也不分配存储空间。事实上,它只是说明变量定义在程序的其他地方。程序中变量可以声明多次,但只能定义一次。

只有当声明也是定义时,声明才可以有初始化式,因为只有定义才分配存储空间。初始化式必须要有存储空间来进行初始化。如果声明有初始化式,那么它可被当作是定义,即使声明标记为 extern例如:

extern int i = 0;

虽然使用了 extern ,但是这条语句还是定义了i,分配并初始化了存储空间。只有当extern声明位于函数外部时,才可以含有初始化式。

因为已初始化的extern声明被当作是定义,所以该变量任何随后的定义都是错误的:例如:

extern int i = 0;
int i; //报错,重复的定义

同样,随后的含有初始化式的extern声明也是错误的:

extern int i = 0; // 定义
extern int i; // 只声明,正确
extern int i = 0; // 重复定义,错误

更多关于extern const的内容可以参考https://blog.51cto.com/u_6924918/1266936

C++中extern使用相关推荐

  1. C/C++中extern关键字详解

    1 基本解释 :extern可以置于变量或者函数 前,以标示变量或者函数的定义在别的文件中 ,提示编译器遇到此变量和函数时在其他模块中寻找其定义 .此外extern也可用来进行链接指定. 也就是说ex ...

  2. C++中extern “C”含义深层探索(zz)

    1.引言 C++语言的创建初衷是"a better C",但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同.作为一种欲与C兼容的语言,C++ ...

  3. Re: Programming C/C++中extern C含义深层探索

    1.引言 C++语言的创建初衷是"a better C",但是这并不意味着C++中类似C 语言的全局变量和函数所采用的编译和连接方式与C 语言完全相同.作为一种欲与C 兼容的语言, ...

  4. C/C++中extern关键字详解与应用

    1.引言:多文件结构中,对全局变量(global variance)的体会 全局变量的好处是毋庸置疑的.方便在各个子模块和局部域中使用.所以,全局变量很适合做众多模块之间的公共交流与通信. 在单文件结 ...

  5. C/C++中extern的用法 ?

    C/C++中extern的用法 简介 extern修饰变量的声明. extern修饰函数声明. 使用extern和包含头文件来引用函数有什么区别呢? extern修饰符可用于指示C或者C++函数的调用 ...

  6. C++中extern “C”含义深层探索

    1.引言 C++语言的创建初衷是"a better C",但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同.作为一种欲与C兼容的语言,C++ ...

  7. C/C++中extern关键字详解[zz]

    1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern ...

  8. C++中extern关键字使用 http://blog.csdn.net/sruru/article/details/7951019

    C++中extern关键字使用 分类: C++ 语法 2012-09-06 15:37 327人阅读 评论(0) 收藏 举报 c++编译器 chapter 1 . extern关键字的作用 exter ...

  9. [转]C++中extern C的含义

    注:本文来自Internet.原文作者已无从考证.若您是原文作者,请给出具体的证明后,我将及时标明作者及出处. 1.引言 C++语言的创建初衷是"a better C",但是这并不 ...

最新文章

  1. DDD领域驱动设计基本理论知识总结
  2. BigData之Hadoop:Hadoop的简介、深入理解、下载、案例应用之详细攻略
  3. java和javaweb的区别_javaee, javaweb和javase的区别以及各自的知识体系
  4. 云计算三大主流阵营的竞争与合作
  5. 文本数据增强+NER
  6. 一步一步搭建mysql_Linux——搭建PHP开发环境第一步:mysql
  7. 360浏览器保存的html没有图标,电脑360浏览器图标不见了怎么办
  8. Redis数据结构之SDS
  9. 您的自动化测试糟透了
  10. handsome主题添加服务器信息,handsome主题部分常用markdown语法
  11. MacOS 苹果 快捷键
  12. Cascade R-CNN: Delving into High Quality Object Detection(个人学习笔记)
  13. 互联网快讯:百世供应链发力汽配赛道;极米NEW Z6X升级版Z6X Pro上线;美的发布方舱医院集成化解决方案
  14. H264系列(7):H.264与MPEG4区别
  15. 电影——《小萝莉的猴神大叔》
  16. LPN管理中涉及到的LPN过多不能释放,导致在调拨环节零散LPN太多,如何解决该问题?
  17. Java Back Propagation Neural Network(JAVA反向传播神经网络)
  18. MacOS 软件版本更新Monterey12.1版之后L2TP无法正常访问内网服务解决方案
  19. 【java基础知识】——jdk和jre的区别
  20. Win10无法输入中文的解决方法

热门文章

  1. linux下时区设置和时间同步
  2. 4 三元表达式 列表解析 生成器表达式
  3. 夏天过去了, 姥爷推荐几套来自smashingmagzine的超棒秋天主题壁纸
  4. encodeURI 和 encodeURIComponent
  5. UICollectionView的使用方法
  6. poj_2762,弱连通
  7. go linux 源码编译环境,Linux 源码安装 GO 环境
  8. python tornado教程_Tornado 简单入门教程(零)——准备工作
  9. c语言判断字符串是不是回文_125. 验证回文串
  10. 织梦 html 优酷,让织梦CMS的后台编辑器支持优酷视频