全局变量与全局静态变量的区别

简介: 全局变量与全局静态变量的区别: (a)若程序由一个源文件构成时,全局变量与全局静态变量没有区别。 (b)若程序由多个源文件构成时,全局变量与全局静态变量不同:全局静态变量使得该变量成为定义该变量的源文件所独享,即:全局静态变量对组成该程序的其它源文件是无效的。

全局变量与全局静态变量的区别

(a)若程序由一个源文件构成时,全局变量与全局静态变量没有区别。

(b)若程序由多个源文件构成时,全局变量与全局静态变量不同:全局静态变量使得该变量成为定义该变量的源文件所独享,即:全局静态变量对组成该程序的其它源文件是无效的。


静态全局变量的作用:

(a)不必担心其它源文件使用相同变量名,彼此相互独立。

(b)在某源文件中定义的静态全局变量不能被其他源文件使用或修改。

例如:一个程序由两个源文件组成,其中在一个源文件中定义了“int n;”,在另一个源文件中定义了“static int n;”则程序给它们分别分配了不同的空间,两个值互不干扰。



例如:下面在file1.cpp中声明全局变量n,在file2.cpp中定义全局静态变量n。文件file1.cpp和file2.cpp单独编译都能通过,但连接时,file1.cpp中的变量n找不到定义,产生连接错误。

// file1.cpp

# include <iostream.h>

void fn()

extern int n;

void main()

{

n=20;

cout<<n<<endl;

fn();

}

// file2.cpp

# include <iostream.h>

static int n; // 默认初始化为0,注意此处定义的n 只能在file2.cpp中使用。

void fn()

{

n++;

cout<<n<<endl;

}



静态函数:使某个函数只在一个源文件中有效,不能被其他源文件所用。

定义:在函数前面加上static。

说明:函数的声明和定义默认情况下在整个程序中是extern的。

静态函数的效果:

(1)它允其他源文件建立并使用同名的函数,而不相互冲突。

(2) 声明为静态的函数不能被其他源文件所调用,因为它的名字不能得到。   
    

 

拙见:
静态变量和函数一般都局限于一个编译单元也就是.cpp文件中。
我想这是最主要的区别。   

相关文章
|
数据采集 机器学习/深度学习 监控
Arm Coresight 介绍
Coresight 是 ARM 架构上的一款嵌入式系统监控和调试工具,能够为系统管理员和开发人员提供便捷的系统监控和调试功能。该平台可以实时追踪和分析处理器上的活动,以深入了解潜在的性能瓶颈和问题。本文将介绍Coresight的概念、优势及其安装、配置、故障排除和调试等方面的内容,并探讨其未来发展方向和重要性。
2355 1
|
Java C++ iOS开发
java为何不支持多继承
java为何不支持多继承
197 0
|
机器学习/深度学习 人工智能 自然语言处理
揭秘深度学习中的自注意力机制及其在现代AI应用中的革新
揭秘深度学习中的自注意力机制及其在现代AI应用中的革新
|
开发工具 Android开发 git
用Fay搭建了数字人
用Fay搭建了数字人
|
Ubuntu 网络协议 Linux
Linux - Ubuntu下执行apt-get update报错:Some index files failed to download. They have been ignored, or old ones used instead.
Linux - Ubuntu下执行apt-get update报错:Some index files failed to download. They have been ignored, or old ones used instead.
3115 0
Linux - Ubuntu下执行apt-get update报错:Some index files failed to download. They have been ignored, or old ones used instead.
|
监控 数据可视化 数据挖掘
GIS 制图:交互式地图的类型和应用
GIS 制图:交互式地图的类型和应用
951 0
GIS 制图:交互式地图的类型和应用
|
机器学习/深度学习 人工智能 算法
商品3D建模的视觉定位和前景分割方法
2021年10月,大淘宝技术发布了基于神经渲染的3D建模产品object drawer ,用户只需要环拍一圈商品的视频,就可以生成3D模型。 在物体重建算法流程中,需要先计算出每一帧图像的相机位姿(平移和旋转)。之后需要对图像中前/背景进行像素级的分割,重建时只需考虑前景而忽略背景像素。准确的相机位姿和前景分割结果是保证高质量重建的前提。
891 0
商品3D建模的视觉定位和前景分割方法
|
Java 数据安全/隐私保护
面试中的 ThreadLocal 原理和使用场景
相信大家不管是在网上做题还是在面试中都经常被问过 ThreadLocal 的原理和用法,虽然一直知道这个东西的存在但是一直没有好好的研究一下原理,没有自己的知识体系。今天花点时间好好学习了一下,分享给有需要的朋友。
面试中的 ThreadLocal 原理和使用场景
|
机器学习/深度学习 人工智能 算法
带你读《深入理解AutoML和AutoDL:构建自动化机器 学习与深度学习平台》之二:自动化人工智能
本书从理论与实践的双重维度,对AutoML和AutoDL的入门知识和进阶知识做了全面介绍。
|
Java Spring
简析@Resource 和 @Autowired的区别
@Autowird @Autowird 属于spring框架,默认使用类型(byType)进行注入,例如下面代码: @Autowired public IUserService userService 系统会根据IUserService接口进行注入,如果这个接口只有一个实现类,那么会正常注入,如果有多个实现类,他会报错,如果没有实现类,它也会报错.
6576 0