C++ 链接和作用域

本文涉及:
C++单定义规则的解释和两种声明变量的方法
变量的持续性( 变量在内存中存在的周期)
作用域的解释,全局和局部作用域,全局和局部变量的解释
存储类的解释,auto,static,extern,register存储类的解释
程序编译的步骤
链接性的解释,外链接,内链接,无链接
变量的链接和作用域实例演示:
各类变量的持续性,链接性和,作用域判断表


前言:

在上一个C++ 命名空间和模块化编程🔍 项目中,我们已经开始创建由多个文件构成的项目,由于多文件导致程序命名空间和变量作用域的混乱,我们需要深入了解更复杂的变量作用域了


单定义规则(One Definition Rule,ODR)

首先因为C++有"单定义规则",此规则指出变量在程序中只能有一次定义.

其次C++提供了两种声明变量的方法:
1.定义声明(原始声明): 即给变量分配存储空间
2.引用声明(extern声明): 即不给变量分配存储空间,因为它只是引用已有的变量,使用关键字extern声明但不对此变量进行初始化.

引出问题:
在模块化编程的过程中,往往会出现a文件中的变量需要在b文件中被调用的情况,此时需要我们在b文件中再次声明一个同名变量,如果直接定义声明,显然是不符合C++单定义的规则的,所以我们需要使用引用声明

想要正确的引用一个变量的声明,便需要了解这个变量所属的作用域以及其链接属性.


持续性的概念(scope)
持续性就是 变量在内存中存在的周期(即何时被分配内存,何时释放内存)

自动:变量从程序开始执行相关函数或代码块时被创建,执行完函数或代码块时释放
静态:变量在程序整个运行过程都存在
动态:变量在new分配时被创建,delete时被释放


作用域(scope)

简单来说,变量作用域就是你可以在什么范围内访问这个变量

作用域:变量是否可见
全局作用域: :(文件) 从声明位置到定义文件的结尾可见
局部作用域: :(代码块) 从声明位置到定义它的代码块的结尾可见

其他作用域:
函数原型作用域: 包含参数列表的括号内可用
类中声明的成员的作用域: 整个类
命名空间中声明的变量的作用域: 整个命名空间

全局变量和局部变量:
全局变量 :一个在所有函数之前定义的变量可以在任何一个函数使用.

全局变量意味着所有函数都能访问,这其中的好处是省去了函数传递参数时的麻烦.
同时由于全局变量的易访问性质,意味可能出现对数据进行了不必要的访问,导致程序的不可靠.

局部变量:而在某个函数里定义的变量只能在那一个函数里使用

上述规则完全适用于单个源文件编译时的情况.那么,当一个项目由多个文件构成时,变 量 的 作 用 域也会受到一定的影响!


存储类(storage class)

每个变量都有一个存储类,存储类决定着程序将把变量的值存储在计算机的位置,存储的方式,以及此变量应该有着怎么样的

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值