主要区别就是作用域:全局变量定义的变量可以被其他文件所看见(即可以被其他文件extern),全局静态变量的作用范围只限于本文件中。

关于在头文件中定义:在#include之后会在cpp文件中展开,相当于在cpp文件中重新定义了变量,当只有一个cpp文件include时,两者没有区别;但是当多个文件都有include时,相当于多个文件定义了同一个变量,比如int a;那么对于static来说,变量是不可见的,在编译时该变量会生成新的名字,如b.cpp文件中的a变量会变成a_b,c.cpp中的a变量会变成a_c,这样在链接的时候两个变量是不会有冲突的;但是若变量不是static的,那么b.cpp和c.cpp的a变量都会编译成同一个名字,如a,那么链接的时候由于两个.obj文件定义了两个名字一样的变量,那么会抛出重复定义变量的错误;

因此,定义全局变量,最好是在.cpp文件中,比如在b.cpp中定义了int a,然后在c.cpp中使用extern a,这样在链接的时候就不会有冲突。其实这个和函数调用的过程差不多,若找不到函数的定义,就用call func代替,直到链接的时候才把func的地址替换。对于extern a也是如此,找不到变量的定义,先用一个符号代替,直到链接的时候做一次替换即可。

全局变量和全局静态变量相关推荐

  1. 【C语言】局部变量、全局变量,局部静态变量,全局静态变量,extern,static的区别...

    局部变量: 创建在栈区(向下生长),生命周期存在于当前作用域中.     创建时若未初始化,则为随机值. 全局变量: 创建在static区,生命周期一直存在. 创建时若未初始化,则为0. 静态局部变量 ...

  2. 2020-11-28(全局变量和局部静态变量)

    常量和全局变量有着相似的特征,都是在程序执行前就存在了.在大多数情况下,在PE文件中的只读数据节中常量的节属性被修饰为不可写:而全局变量和静态变量则在属性为可读写的数据节中. 具有初始值的全局变量,其 ...

  3. 局部静态变量和全局静态变量

    静态变量的类型说明符是static. 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量,例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能 ...

  4. wpf绑定全局静态变量并且实现变更通知(mvvm)

    在实际的开发中,有一些集合或者属性可能是全局的,比如当你做一个oa的时候,可能需要展示所有的人员,这时这个所有的人员列表显然可以作为全局参数,比如这里有一个全局的静态属性UserList.而你在使用m ...

  5. 【转载】wpf绑定全局静态变量并且实现变更通知(mvvm)

    这篇看了之后,很有启发,也很有用!,分享给大家 以下是转载内容. ---------------- 版权声明:本文为CSDN博主「returnTrue999」的原创文章,遵循CC 4.0 BY-SA版 ...

  6. php 全局 静态变量,php的static关键字和全局变量

    1.全局变量[其不属于面向对象的思想,因为其放在对象之外的],面向对象有一个特点,其实封装的,php希望其所有的成员都应该放在类中:php的面向对象是基于面向对象的,不是纯粹面向对象的:也就是其可以面 ...

  7. Android 如何定义全局变量 以及 static静态变量使用误区 的问题

    static 修饰的是 静态变量,它的优点是 使用很方便,在不同的类和包中都可以使用,在虚拟机中单独占用内存. 不过使用 static 有一些不太好的地方:项目中 使用 static 的很多地方会莫明 ...

  8. 对全局变量,static静态变量的理解

    如果所有的变量按照下面的程序进行定义和声明,那么在main()函数中所有可用的变量为 (). void fun(int x) {static int y;--return; } int z; void ...

  9. java 全局变量线程安全_Java线程安全问题指的是全局变量,还是静态变量?

    这个问题的答案是静态变量和全局变量都可能引起线程安全问题.这两种变量引起线程安全问题的原因和区别如下: 1.静态变量 静态变量即静态成员变量.只要有修改变量值的操作,无论是在单例或者非单例都是线程不安 ...

最新文章

  1. 20155229实验三 《Java面向对象程序设计实验三 敏捷开发与XP实践 》实验报告
  2. 机器学习 集成学习篇——python实现Bagging和AdaBOOST算法
  3. 解决pc端浏览器不兼容的问题
  4. python从视频中提取音频_提取视频中的音频——python三行程序搞定!
  5. DEPENDS工具和DUMPBIN工具使用
  6. 基于MLlib的机器学习--协同过滤与推荐
  7. 和无用代码说再见!阿里文娱无损代码覆盖率统计方案
  8. python程序-调试Python程序代码的几种方法总结
  9. 使用IntelliJ IDEA开发Maven初始化创建流程
  10. 怎么卸载脚手架_安装卸载流程 · 广联达BIM模板脚手架设计软件帮助文档 · 看云...
  11. 基于Modelica的起落架摆震建模
  12. LIBSAS/SAS驱动代码分析(1)之概述
  13. 企业实施PDM能解决这些问题
  14. 转载:林锐:大学十年(一个程序员的路程)(全)
  15. tp6+layui后台管理系统
  16. P1134 高精度阶乘
  17. python pymysql cursors_怎么Pythonpymysql.cursors从mysql存储过程获取INOUT返回结果
  18. 雷神科技在北交所上市首日破发:上半年业绩下滑,路凯林为董事长
  19. Acwing - Linux基础课(九)- docker教程
  20. 表格插件vxe-table

热门文章

  1. 客户端加JS代码判断复选框是否全选的代码
  2. 关于计算机病毒事件,计算机病毒的事件
  3. pool win10提示bad_如何解决Win10系统出现bad pool header蓝屏现象?
  4. Win7中的软链接详解(mklink命令)
  5. C#修改解决方案的名称 和解决方案文件夹的名称 ,及项目程序名称,项目文件夹名称
  6. linux网卡混杂模式和监听模式
  7. Window 产品密钥
  8. 二、卫星大地测量基础(3)
  9. NYOJ597 完数?
  10. 安卓 7.0 无法获取外置SD卡问题解决方案 | Failed to find configured root that contains