全局变量,extern和static以及命名空间的区别
       全局变量只是在声明它的文件中有效,假如在另一个文件中声明定义了一个相同名称的全局变量,则在后续使用这两个变量的时候会产生名字上的冲突,解决的办法就是将其中一个全局变量的声明写在未命名的命名空间中,这样可以防止在另一个文件中使用同名变量的时候出现编译上的错误。原因是未命名的命名空间的所有成员在其他文件中都是不可见的,因此也就间接的解决了不同文件中相同变量,函数的重名问题。
        extern关键字用来声明变量,或者函数名以及对象名在其他文件中已经定义过,它通常只是起到一个说明的作用,只是告诉编译器这个变量来自其他文件,编译器会根据这个它提供的变量和名字在其他文件中查找。static关键字和未命名空间的作用相同,是文件级别的静态变量,也就是说它所定义的变量只能在使用它的文件中使用,而在其他文件中必须显示的包含它才可以使用(一般是使用#include包含static所在的文件)。static与extern的区别是:static是内部链接,extern是外部链接,static定义的变量只能在此变量的文件中使用,而extern则将它所声明的变量链接到其他文件,以便于链接器查找到此变量的定义部分。
        和extern相似的是,未命名的命名空间也是外部链接,在声明未命名空间的时候,系统为每个未命名空间分配了一个名字,这样就不会与其他文件中相同的名字产生冲突。

转载于:https://www.cnblogs.com/sunfie/p/4394588.html

全局变量,extern和static以及命名空间的区别相关推荐

  1. C C++中关于全局变量静态变量,extern,static,const的区别与总结

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

  2. c 多文件全局变量_C/CPP : static 关键字 及 变量函数的不同

    C/CPP : static 关键字 及 变量函数的不同 本文由zaccur整理编辑,如需转载请注明出处. 综述 static关键字是C, C++中都存在的关键字.从字面理解是"静态的&qu ...

  3. 全局变量、静态全局变量、静态局部变量和局部变量的区别

    static和const都是C++中比较麻烦的东西,只要是太容易混淆他们的作用,之前对static做过点总结,但是不全面,还有很多小的错误,现在整理一下: 变量可以分为:全局变量.静态全局变量.静态局 ...

  4. 【正本清源】关于extern、static、const的正确使用方法

    项目要用到DMA传输传感器的数据,研究了一下DMA,觉得并没有什么难的,不就是配置几个参数么,但是却怎么也收不到数据.无奈只能照着野火的例程仿制了一遍.结果还是没有任何反应,这一整天就是在不断地尝试各 ...

  5. extern与static

    在讨论全局变量之前我们先要明白几个基本的概念: 1. 编译单元(模块):     在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LINK E ...

  6. C++ const关键字的总结(全局/局部变量、修饰指针和引用、成员函数和数据成员、修饰类对象、const与宏定义的区别、Static与Const的区别)

    const关键字 const关键字 1.什么是const 2.使用原理 2.1.const全局/局部变量 2.2.cosnt修饰指针和引用 2.3.const修饰函数参数 2.4.const修饰函数返 ...

  7. C与C++中的extern与static、extern C与__cplusplus的作用

    一.概述 以C语言编写的源文件后缀名为.c,以C++语言编写的源文件后缀名为.cpp,C++支持函数的重载,C和C++编译器对函数的编译处理是不完全相同.C++编译后的函数一般是以函数名和形参类型来命 ...

  8. java中static、final 和 static final之间的区别

    java中static.final 和 static final之间的区别 static可以修饰:全局属性,方法,代码块,内部类(静态内部类或嵌套内部类) 由于静态属性和方法是属于该类的所有对象的,所 ...

  9. const、extern、static的使用不再神秘

    验证const: 验证extern: extern的作用是在程序中引入一个全局变量,比如 extern int age:当然这个age变量名在整个程序中只能有一个,否则会发生冲突.而且无论在哪个文件中 ...

最新文章

  1. 前腾讯AI Lab负责人张潼加入创新工场,任港科大创新工场联合实验室主任
  2. 17岁「天才少女」被8所世界名校录取,最终选择MIT计算机系,还说学成后肯定回国...
  3. Linux嵌入式驱动管理调试平台 ------ 我的第一个开源项目
  4. RSTP的根保护功能
  5. asp.net mvc3 网站退出系统后使用浏览器的回退按钮依然能返回到内容页的处理方法...
  6. gateway动态路由_微服务与网关技术(SIA-GateWay)
  7. hdu 5187 zhx's contest
  8. w ndows10怎么关闭启动项,win10怎么关闭开机启动项
  9. MIME类型“ image / jpg”是否与“ image / jpeg”相同?
  10. Redis面试题及答案 2021最新版 140道
  11. 2022全国职业技能大赛大数据技术与应用赛项赛题环境准备
  12. 74HC595芯片应用
  13. 古巨蜥好几吨重,但在我们智人祖先面前也是枉然 | 袁硕 一席第449位讲者
  14. 野生葫芦娃用心写的nodejs 内置模块------文件操作
  15. 蓝牙耳机型号有哪些?口碑最好的蓝牙耳机
  16. 独立后台带分销功能月老办事处交友盲盒微信小程序源码新版,更好的裂变推广引流
  17. PMOS和NMOS开关应用
  18. 联想A800新蜂ROM刷机包 官方4.0.4优化 精简省电稳定 V1.2
  19. 提笔,再回忆~落笔,成悔,一切皆已随风:伤感日志
  20. 【推荐】智慧油田数字化油井智能入侵监测井口控制系统解决方案合集(共83份,884M)

热门文章

  1. C语言开发笔记(二)volatile
  2. 【C++基础】C++11的noexcept声明符 与 异常传播
  3. 基于云平台的家居综合监测管理系统的设计与实现
  4. tomcat没有错,但是还是一闪而过(端口被占用)
  5. hdu 2112 ——HDU Today
  6. 283. 移动零 golang
  7. Mysql5.7后的password加密和md5
  8. c++中容器(STL)的共性与使用的时机
  9. TCP第四次挥手为什么要等待2MSL
  10. Linux下串口通信详解