首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么要使用extern关键字来声明命名空间作用域中的变量?

extern关键字用于声明一个变量,该变量在其他文件中已经定义。它的作用是告诉编译器该变量在其他地方定义,不需要在当前文件中重新定义。

使用extern关键字声明命名空间作用域中的变量有以下几个原因:

  1. 共享变量:当多个文件需要共享同一个变量时,可以使用extern关键字来声明该变量。这样,在不同的文件中可以通过extern关键字引用同一个变量,实现数据的共享和交互。
  2. 避免重复定义:在大型项目中,可能会有多个文件需要使用同一个全局变量。如果在每个文件中都定义该变量,会导致重复定义的错误。使用extern关键字可以避免这种情况,只需要在一个文件中定义该变量,其他文件中使用extern关键字引用即可。
  3. 节省内存空间:在某些情况下,全局变量可能会占用大量的内存空间。如果在每个文件中都定义该变量,会导致内存空间的浪费。使用extern关键字可以将变量定义在一个文件中,其他文件中只需引用该变量,节省内存空间。
  4. 提高代码的可维护性:使用extern关键字可以明确地表示某个变量是在其他地方定义的,提高代码的可读性和可维护性。其他开发人员在阅读代码时,可以清楚地知道该变量的来源和定义位置。

总结起来,使用extern关键字来声明命名空间作用域中的变量可以实现变量的共享、避免重复定义、节省内存空间,并提高代码的可维护性。

腾讯云相关产品和产品介绍链接地址: 腾讯云产品:https://cloud.tencent.com/product

请注意,本回答仅供参考,具体的技术实现和最佳实践可能因个人经验和具体情况而异。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++入门必备知识(你真的入门C++了吗?)

命名空间 1.命名空间产生原因 在C/C++中,变量、函数和后面学习类都是大量存在,这些变量、函数和类名称都存在于全局作用域中,可能会导致很多冲突。...使用命名空间目的是对标识符名称进行本地化,以避免命名冲突或者名字污染,namespace关键字出现就是针对这种问题。...2.命名空间定义 定义命名空间,需要使用到namespace关键字,后面跟命名空间名字,然后接一对{}即可,{}中即为命名空间成员。...注:同一个命名域中不能定义同名变量 //1.普通命 名空间 namespace N1 // N1为命名空间名称 //命名空间内容,既可以定义变量,也可以定义函数 int a; int Add...注意:早期标准库将所有功能在全局域中实现,声明在.h后缀头文件中,使用时只需包含对应头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带h; 旧编译器

46020

【C++初阶】C++入门

参考链接: C++继续声明 C++入门  C++关键字命名空间C++输入&输出缺省参数和函数重载为什么C语言不能重载(原理) C++关键字  1、asm _asm是一个语句分隔符。...16、explicit 该关键字作用就是避免自定义类型隐式转换为类类型。 17、export   使用关键字可实现模板函数外部调用。...对模板类型,可以在头文件中声明模板类和模板函数;在代码文件中,使用关键字export定义具体模板类对象和模板函数;然后在其他用户代码文件中,包含声明头文件后,就可以使用该这些对象和函数。...命名空间除了系统定义名字空间之外,还可以自己定义,定义命名空间关键字“namespace”,使用命名空间时用符号“::”指定。...定义:   定义命名空间,需要使用到namespace关键字,后面跟命名空间名字,然后接一对{}即可,{}中即为命名空间成员。

1.2K30

一文掌握C++基本语法

C++关键字 2. 命名空间 变量、函数和后面学到类都是大量存在,这些变量、函数和类名称将都存在于全局作用域中,可能会导致很多冲突。...使用命名空间目的是对标识符名称进行本地化,以避免命名冲突或名字污染,namespace关键字出现就是针对这种问题。...2.1 命名空间定义 使用namespace关键字,后面跟命名空间名字,然后用{}将成员括起来即可,和C语言结构体类似 存在多个相同命名空间时候,编译器编译时候会把他们合并,如下面 命名空间可以嵌套...PS:命名空间定义了一个新作用域,命名空间所有内容都局限于该命名空间中,但是成员生命周期没有改变,仍然是全局。...2.2 命名空间使用 命名空间有3种使用方式 以下均使用命名空间 1.加命名空间名称及作用域限定符 这种方法每次使用时候都要进行::限定,比较麻烦 2.使用using将命名空间中成员引入 这样就可以不用

86010

【C++】命名空间&缺省参数&函数重载&引用&内联函数

目录 1.C++兼容C语法 2.using namespace std作用:解决C语言中变量命名冲突问题  2-1namespace由来 2-2namespace使用: 3.使用标准库或自己定义命名空间东西三种方式...,这里两个scanf都是int类型变量,所以出错 //小结:如果我就是想要达成我本意这个目的,C语言明显做不到(有命名冲突问题),所以C++就使用namespace命名空间完善C }...namespace使用: 2-2namespace使用: #include //定义是一个命名空间域:(变量和函数构成) namespace song { //变量 int...,编译链接时会自动合并  但是在同一个域中不能定义相同标识符 3.使用标准库或自己定义命名空间东西三种方式: #include int main() { //要使用标准库里东西...(组件)中函数时候就会表示找不到.这时extern "C"作用就凸显出来了. 6-1-2-2.extern "C"作用为什么可以通过extern "C" 解决这个问题?

79730

C++初阶-入门基础语法

目录 前言 一、C++关键字 二、namespacem命名空间 命名空间使用三种方式 三、C++输入&输出 四、缺省参数 缺省参数分类 五、函数重载 名字修饰 extern “C” 六、引用 常引用...二、namespacem命名空间 ---- 概念: 在C/C++中变量、函数和类名称都大量存在于全局作用域中,可能会导致命名冲突 使用命名空间目的是对标识符名称进行本地化,以避免命名冲突或名字污染...使用使用namespace关键字,后面跟命名空间名字,然后接一对{}即可,{}中即为命名空间成员 示例1:普通定义 //1....* right; } } 注:一个命名空间就定义了一个新作用域,命名空间所有内容都局限于该命名空间中,避免因为同名变量以及函数而被调用(相当于一个壁障) 命名空间使用三种方式 示例1:加命名空间名称及作用域限定符... 早期标准库将所有功能在全局域中实现,声明在.h后缀头文件中,使用时只需包含对应头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带

67820

C++ 炼气期之变量生命周期和作用

如在源代码文件中声明变量能在整个文件中使用(文件级别作用域),在类中声明变量能在类中使用(类级别作用域)、名称空间声明变量可以在整个名称空间使用。...当再次从低级别作用域返回高级别作用域后,高级别作用域中同名变量会变得可见。 在同一个作用域内是不能有同名变量,如下代码,会报错。...且在 extern.cpp 中声明如下变量: 在 main.cpp中如果需要使用 extern.cpp文件中变量 guoKe_。则需要使用关键字extern加以说明。...输出结果: 如果在 main.cpp中使用 guoKe_时没有添加extern关键字,则会出错。会认为在程序作用域内声明了 2 个同名变量。...如下代码,在文件 extern.cpp中声明了一个使用 static关键字说明变量 guoKe_。 其使用范围只能是在 extern.cpp文件中。

86230

程序员C语言快速上手——进阶篇(八)

进阶篇 程序结构与作用域 局部变量 全局变量 static关键字 extern关键字 模块化开发补充 头文件嵌套包含 头文件保护 进阶篇 程序结构与作用域 过程式、模块化C语言程序是由多个源文件...在源文件中定义函数,那么在函数之外地方,就属于全局作用域,即使是多个源文件,只要在函数之外,那它们就都属于全局作用域,全局作用域,全局都可访问。而在函数之内空间声明变量,那它属于局部作用域。...需要特别注意,由于C语言没有命名空间概念,它只有一个全局作用域,当你C程序十分庞大时,存在几百上千个函数时,很难保证函数不会同名。...一旦函数同名了,就会形成命名冲突,这就是为什么我们看一些C语言编写开源库时,变量名、函数命名非常复杂,名字很长,多个单词大写或以下划线分隔,这样怪异命名很大程度上就是为了避免命名冲突。...当全局变量离开了它文件作用域后,无法直接使用,这时候我们需要另一个关键字extern帮助我们使用它。

90930

C++中作用域与生命周期

C++中作用级别主要有文件域(全局作用域)、命名空间域、类域、函数作用域和代码块作用域(局部域)。 2.函数作用域 函数分为类成员函数和全局函数。 类成员函数: - 作用域:类域。...- 引用方法:其他文件中要使用必须用点操作符(.)或作用域运算符(::)引用。 - 内存分布:代码区。...- 引用方法:其他文件中先进行函数原型声明,再使用。 - 内存分布:代码区。 - 注意:如果在两个源文件中定义了同名全局函数,连接时会出现重定义错误。...public: void show() { cout<<"i:"<<i<<endl; } }; } using namespace dd;//引用命名空间域中构造类型...全局变量: - 作用域:全局作用域(全局变量只需在一个源文件中定义,就可以作用于所有的源文件); - 生命周期:程序运行期一直存在; - 引用方法:其他文件中要使用必须用extern 关键字声明引用全局变量

1.1K20

【C++修行之道】命名空间 、C++输入&输出、缺省参数和函数重载

结构体类型定义 using 引用命名空间或类型别名 friend 友元声明 class 类定义 extern 外部变量或函数声明 operator 操作符重载 switch switch语句 virtual...释放动态内存分配操作符 reinterpret_cast 重新解释类型转换 goto 无条件跳转语句 二、 命名空间 在C/C++中,变量、函数和后面学到类都是大量存在,这些变量、函数和类名称将都存...使用命名空间目的是对标识符名称进行本地化, 以避免命名冲突或名字污染,namespace关键字出现就是针对这种问题。...定义命名空间,需要使用到namespace关键字,后面跟命名空间名字,然后接一对{ }即可,{ } 中即为命名空间成员。...注意:早期标准库将所有功能在全局域中实现,声明在.h后缀头文件中,使用时只需包含对应头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间, 规定C++头文件不带.h

4700

计算机萌新成长历程——初识C语言16

我们今天探讨关键字是除上述这些关键字外其它能够供我们在今后写代码过程中直接使用,下面咱们简单介绍一下吧。...我们一个工程中可能不止存在一个项目,这里我们拓展一下全局变量一个新内容,为什么说它作用域是整个工程而不是项目,这里我们创建一个新项目test3-1.c验证一下,如图: 这里我们在新建项目中定义了一个整型全局变量...这个结果进一步说明了全局变量作用域是整个工程,只不过在不同项目之间需要使用的话需要用到关键字extern——引入外部符号,那如果我们给全局变量a前面加上static,结果又会如何呢?...进行调用,这里要注意调用格式: extern 自定义函数字符(变量类型,变量类型);//这里通过extern对外部函数进行声明; //完成声明后进行正常调用; 这里我们可以看到,add函数在被声明后可以很好地使用...,通过这里我们可以总结以下函数链接属性,函数不仅拥有内部链接属性,能够在自己所处项目内正常调用,还拥有外部链接属性,在不同项目内通过extern关键字声明外部函数,以此进行正常调用。

16020

C++:05---命名空间

; 三、命名空间注意事项 命名空间定义时最后分号可有可无 只要出现在全局作用域中声明都可置于命名空间内:类、变量定义(及其初始化)、函数声明(及其定义)、模板、其它命名空间....等 命名空间可以嵌套...a; fun(); mySpace::fun(); return 0; } 五、多个命名空间使用、以及作用关系 1.多个命名空间使用时,如果变量、函数名等重名时,使用时需要加上作用域限定符...命名空间变量、函数等与全局变量重名时,使用时需要加上作用域限定符 全局变量在前面加上::,命名空间在前面加上命名空间名 namespace ns1 { int a=1; } using namespace...using声明声明是一个名字,而非一个特定函数 该函数所有版本都被引入到当前作用域中 注意:如果using声明一个函数与作用一个函数同名且参数列表相同,将发生错误 using NS::print...(但是我们指明调用命名空间还是当前作用) namespace NS { extern void print(int); extern void print(double); } void print

73420

C++:02---命名空间

; 三、命名空间注意事项 命名空间定义时最后分号可有可无 只要出现在全局作用域中声明都可置于命名空间内:类、变量定义(及其初始化)、函数声明(及其定义)、模板、其它命名空间....等 命名空间可以嵌套...a; fun(); mySpace::fun(); return 0; } 五、多个命名空间使用、以及作用关系 1.多个命名空间使用时,如果变量、函数名等重名时,使用时需要加上作用域限定符...命名空间变量、函数等与全局变量重名时,使用时需要加上作用域限定符 全局变量在前面加上::,命名空间在前面加上命名空间名 namespace ns1 { int a=1; } using namespace...using声明声明是一个名字,而非一个特定函数 该函数所有版本都被引入到当前作用域中 注意:如果using声明一个函数与作用一个函数同名且参数列表相同,将发生错误 using NS::print...(但是我们指明调用命名空间还是当前作用) namespace NS { extern void print(int); extern void print(double); } void print

55510

【C++奇迹之旅】C++关键字&&命名空间使用三种方式&&C++输入&输出&&命名空间std使用惯例

在C/C++中,变量、函数和后面学到类都是大量存在,这些变量、函数和类名称将都存在于全局作用域中,可能会导致很多冲突。...命名空间查找顺序是: 当前命名空间 > 父命名空间 > 全局命名空间 > 模块命名空间 > 内置模块命名空间 从最具体的当前命名空间开始向上级别进行查找,一直到全局和内置模块命名空间,以此解决可能出现同名变量和函数命名冲突问题...: 展开命名空间可能会导致主要问题如下: 名称冲突 当使用using namespace将一个命名空间所有名称导入到当前作用域时,如果导入命名空间和当前命名空间存在同名变量/函数等,就会产生名称冲突...注意:早期标准库将所有功能在全局域中实现,声明在.h后缀头文件中,使用时只需包含对应 头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间, 规定C++头文件不带...注意:早期标准库将所有功能在全局域中实现,声明在.h后缀头文件中,使用时只需包含对应 头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间, 规定C++头文件不带

11710

C++作用域与生命周期

成员函数: 作用域:类域。 生命周期:无(程序运行期一直存在)。 引用方法:其他文件中要使用点操作符(.)或指针操作符(->)或作用域运算符(::)引用。 内存分布:代码区。...引用方法:其他文件中先进行函数原型声明,再使用。 内存分布:代码段。 注意:如果在两个源文件中定义了同名全局函数,连接时会出现重定义错误。...i; public: void show() { cout<<"i:"<<i<<endl; } }; } using namespace dd;//引用命名空间域中构造类型...全局变量作用域:全局作用域(全局变量只需在一个源文件中定义,就可以作用于所有的源文件); 生命周期:程序运行期一直存在; 引用方法:其他文件中要使用必须用extern 关键字声明引用全局变量。...; 定义方法:static关键字,const 关键字; 注意:只要文件不互相包含,在两个不同文件中是可以定义完全相同两个静态变量,它们是两个完全不同变量

87832

C语言变量与常量

为了避免未初始化带来问题,建议是: 初始化:单文件内使用声明:在跨文件定义、使用变量变量作用域 块作用域、函数作用域、文件作用域、全局作用域。 内层作用域会隐藏外层作用域。...下面这个例子除了文件作用域都用上了: 变量还有个“先声明,后使用问题。平时写代码时候,只要在使用之前定义,就不会出问题。...无论是const还是enum,都要遵循“先声明使用原则。 常量作用 避免魔法数 通过使用常量表示特定数值或字符,可以避免在代码中直接使用未经解释“魔法数”。...通过在其他文件中使用extern关键字声明变量,就可以在其他文件中访问该全局变量。需要注意是,全局变量对于整个程序是可见,因此需要小心处理全局变量使用,以防止命名冲突或意外修改。...头文件:可以头文件共享变量定义和声明。在一个头文件中定义变量,然在多个文件中包含该头文件,以实现对变量访问。,应在一个文件中进行变量实际定义,而在其他文件中只进行声明

13920

【C#学习笔记之一】C#中关键字

const 指定无法修改字段或局部变量值。声明常量关键字 event 声明事件。常与委托(delegate)一起使用 extern 指示在外部实现方法。...密封类关键字,密封类不能被继承(不想让其它类继承可以声明为密封类) static 静态成员关键字,静态成员可以直接通过类调用(在动静态调用都可以),动态成员必需通过对象调用 unsafe 声明不安全上下文...(C# 参考) 本节描述与 using 命名空间关联关键字和运算符: Namespace — 命名空间 using .Operator :: 运算符 外部别名 Operator Keywords (C...global 指定未以其他方式命名默认全局命名空间。 Partial — 部分 在整个同一编译单元内定义分部类、结构和接口。...var 使编译器能够确定在方法作用域中声明变量类型。 where 将约束添加到泛型声明。(另请参见where)。 yield 在迭代器块中使用,用于向枚举数对象返回值或发信号结束迭代。

2.4K50

Python学习 :函数

星号(*)变量名会存放所有未命名变量参数,使用一个元组进行储存。...两个星号(**)变量名会存放命名变量参数,使用字典中键值对进行储存 注意:关于不定长参数位置:*args参数放在左边,**args参数放在右边 如果有默认参数存在,放在左边,关键字参数放在最左边...6   嵌套作用域中变量c: 3   全局作用域中变量a: 1 global关键字 在内部作用域中,当修改外部作用域(全局作用域)变量时候,这时可以使用global关键字 a = 0 # global...在嵌套作用域中,当修改嵌套作用域(enclosing作用域,外层非全局作用域)中变量时,这时可以使用nonlocal关键字 def outer(): a = 1 # enclosing...; 内部作用修改外部作用变量值时,修改全局变量使用global关键字,修改嵌套作用变量使用nonglobal关键字

43040

【C++】命名空间 namespace 与 标准流 iostream ( 命名空间概念简介 | 命名空间定义 | 命名空间使用 | iostream 中命名空间分析 )

命名空间 namespace 关键字 , 每个开发者将自己写 名称 定义到 专门空间中 , 这个空间就是 命名空间 namespace ; 命名空间 namespace 可以避免 定义 各种 变量名称...相同名称 标识符 , 不会出现冲突 ; C++ 中 默认命名空间是 全局作用域 , 访问 全局作用域 中标识符 , 可以直接访问 , 也可以使用 ::标识符 进行访问 ; 命名空间 是 可以嵌套...中使用 ; 2、命名空间定义语法 命名空间定义语法 : 定义 命名空间 需要使用 namespace 关键字 , 将要定义内容 写在 namespace 命名空间名称 后大括号中 ; namespace..., 但是在该 文件 中没有使用命名空间 , 那么如果访问 命名空间内容 , 需要添加 MyNamespace :: 前缀 , 访问 MyNamespace 命名空间 myVariable...使用命名空间 语法 : 使用如下语法 , 可以 声明使用一个命名空间 , 可以直接访问命名空间元素 ; // 使用 指定 命名空间 using namespace 命名空间名称; 如果要使用 嵌套命名空间

31730

⭐️ 关键字深度剖析 ⭐️第二章(多文件数据类型&关键字externstatic)

extern使用 多文件作用 static作用 如何看待类型 变量命令规则 sizeof 理解 关键字-extern ---- 首先我们知道: 全局变量,是可以跨文件,被访问 全局函数...,是可以跨文件,被访问 而跨文件使用需要声明,可以使用关键字extern声明 注意:声明并不会开辟空间,故变量声明时候不能设置初始值 使用变量声明必须带上extern 函数声明建议带上...extern 多文件 ---- 单纯使用源文件,组织项目结构时候,项目越大会越复杂,而维修成本会越来越高,这时候我们需要建立头文件减少维护成本 定义 //.h:我们称之为头文件,一般包含函数声明...\n"); return 0; } 关键字-static ---- static修饰变量 修饰全局变量 使该全局变量只能在本文件内被使用 注:影响作用域,而不是生命周期 修饰局部变量...在内存中开辟一块空间,用来保存数据(目的) 而定义一个变量,是需要类型,这个是基本语法决定 结论 类型决定了变量开辟空间大小 不同类型满足不同应用场景(便于节省空间

22830

C++打怪升级(一)- 命名空间、缺省形参、重载

命名空间关键字:namespace 创建一个命名空间使用namespace关键字,后面跟命名空间名字,最后用{}包含命名空间成员。...域作用限定符:: scope::tag 两个操作数:左操作数是指定一个域,右操作数是一个标识符(变量、函数名等) 使用作用限定符访问命名空间成员**:** #include <iostream...---- 使用关键字using将命名空间某个成员引入 又称为命名空间部分展开; 引入该成员后,就可以直接使用该成员了,不需要再用域作用限定符了(当然用了也不会出错)。...<< std::endl; return 0; } 使用关键字using namespace将命名空间名称(所有成员)引入 又称为命名空间全部展开 可以直接使用命名空间内所有的成员了 所有成员作用域发生了变化...注意:早期标准库将所有功能(定义)在全局域中实现,声明在.h后缀头文件中,使用时只需包含对应 头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间, 规定C++头文件不带

82120
领券