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

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

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

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

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

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

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

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

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

相关·内容

【C++】详解命名空间

为了弄清楚这个问题,接下来我们需要来探讨一下命名空间的使用方法; 3.6 命名空间的使用方法 命名空间在使用时有三种方式: 通过作用域限定符来指定作用域; 通过关键字using和关键字namespace...来展开作用域 通过关键字using和作用域限定符来展开指定作用域中的指定对象 接下来我们就来逐一介绍这三种使用方式; 3.6.1 通过作用域限定符来指定作用域 在前面的介绍中我们知道当我们在对变量、函数...这就是我们要介绍的第三种方式——通过关键字using和作用域限定符来展开指定作用域中的指定对象。...当我在一个项目中创建好一个全局变量后,我可以直接在该项目中进行使用,而在其它项目中使用时需要通过关键字extern来对其进行声明; 局部变量的作用域是伴随对应的局部域的。...test4.cpp,所以我们在test3.cpp这个项目中进行使用时需要通过extern来进行声明,声明后,它也能在该项目中正常使用; 对于局部变量z而言,它的作用域就是它所在的局部域,也就是func2

12310

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

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

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

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

    1.3K30

    C++入门篇1

    避免命名冲突是很重要的,在C/C++中,变量、函数和后面要学到的类都大量存在各式各样的名字,这些变量、函数和类的名称都存在于全局作用域中,可能会和你的变量、函数、类的名字冲突。...//报错:rand重定义,以前的定义是函数 2.1 命名空间的定义 为了定义命名空间我们需要用到namespace这个关键字。...yui内的rand return 0; } //打印结果 /* 100 */ 注意:一个命名空间就定义一个新的作用域,命名空间中的所有内容都局限于改命名空间。...注意:早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需要包含对应头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带.h;...5.1 函数重载概念 函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些函数的形参列表(参数个数或者类型或者类型顺序)不同,常用来处理功能类似数据类型不同的问题。

    8810

    【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" 解决这个问题?

    82730

    一文掌握C++基本语法

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

    1.8K10

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

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

    71620

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

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

    98130

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

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

    94930

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

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

    1.2K20

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

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

    7200

    【C语言】详解static和extern关键字

    另外,再向大家声明一个点: 在我们初步学习变量的命名规则时,里面规定:变量的命名是不能重复的。这里我拓展一个点就是,此条件是在同一个作用域下才生效。 可能有的读者已经get到我的点了。...换句话说,在局部变量所处的作用域中,用该局部变量的值,而不是全局变量。...使用建议:未来⼀个变量出了函数后,我们还想保留值,等下次进⼊函数继续使⽤,就可以使⽤static 修饰。 4. extern关键字 extern关键字的作用:赋予变量外部链接属性。...那么现在我接受到了一个任务:我必须要在文件B中使用文件A的内容(一些变量的值、函数等等)。 那我们该怎么做? 用extern关键字。 在展示代码之前,想跟大家聊一聊,为什么就是用这个关键字?...6.总结 在本文中,介绍了变量的作用域和生命周期,还说明了static和extern两个关键字以及它们如何使用。 希望能帮到大家。

    27310

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

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

    18820

    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

    74820

    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

    58710

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

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

    15410

    C++作用域与生命周期

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

    93732

    C语言变量与常量

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

    19820

    C++入门篇

    没关系,我们先从命名空间开始讲,慢慢你就会懂了。namespace就是命名空间 为什么要引入命名空间呢?...在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。...其实不然,在我们平时地使用下可能确实是没有什么作用的,但是一但我们开始工作后,他的作用就会显示出来,在工作的时候,公司在写一个大型项目的时候往往要很多人去写,每个人完成项目的一部分,但是每个人都会对变量起名字吧...为了避免这种情况,我们还是要学会使用命名空间的。 命名空间可以嵌套你可以无限的嵌套命名空间。 C++的输入输出 在C++我们要怎么输出一个东西呢?...值得注意的是: 早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带

    10710

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

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

    2.4K50
    领券