首页 > 其他分享 >标识符的作用域与可见性

标识符的作用域与可见性

时间:2024-07-28 16:59:53浏览次数:16  
标签:变量 作用域 可见 生存期 static 标识符 定义

一,作用域分为局部作用域与全局作用域

1、局部作用域
通俗来讲,在花括号内的均为局部作用域。

2、全局作用域

所有的函数都有全局作用域。全局变量便在全局作用域,指定义在函数之外的变量,全局变量可以

为本文件之外的其他函数所共用。它的有效范围为从定义变量的位置开始到本源文件结束。

全局变量前可加‘ g_ ’前缀。全局变量若未被初始化,则自动以位模式清零。

3.可见性规则:所有的标识符都符合以下四条规则

(1)标识符必须先定义,再使用。

(2)在同一作用域当中,不能定义同名标识符。

(3)在没有包含关系的作用域中,定义的同名标识符互不影响。

(4)在两个或两个具有包含关系的不同作用域中定义的同名标识符,外层标识符在内层不可见。

         (简称就近原则,哪个近用哪个的值)

二、变量的生存期

可理解为从变量的产生到销毁的过程,分为静态生存期、动态生存期。

1、静态生存期

变量生存时间与程序运行周期相同。

包括全局变量、static所修饰的局部变量。

注意:static修饰后的变量,不会随着函数结束而被销毁。

2、动态生存期

例如循环里的局部变量。

结果为11,12

结果为11,11。

是因为下面的变量未被static修饰,仍为动态生存期,在fn结束后被销毁,第二次调用时重新创建一个局部变量被赋值10,执行结束后仍为11;

而上面被static修饰后,变量从动态生存期变为静态;在fn结束后仍然存在因此在第二次调用fn时变量值仍未第一次调用结束后的11,第二次结束后结果为12。

这便是下面要说的static的第一个用法。

三、修饰变量

1、auto  变量
函数的形参在函数中定义的变量,调用时系统会为其分配存储空间,调用结束后会自动释放存储空间。一般都省略不写,隐含为自动存储类别。

2、static  变量
作用:(1)对于局部变量,前缀表示将该局部变量从原先的动态生存期修改为静态生存期。

        (2)当放在全局变量或者函数前时,表示限制该函数只能在本.c文件中使用。

3、register  变量
建议而非命令;它将放在存储器内的值放在CPU的寄存器中完成更加高速的存取。

4、extern  变量
外部声明,定义只能一次,声明可以无数次。头文件(~.h)当中只放声明,不放定义,不参与编译。自己定义的头文件用双引号引起来。

函数的声明:extern int add(int a,int b);

在main.c文件中可以包含一个头文件用来专门声明。

可以用 -E选项(只做预处理,不编译)来观察main.c中预处理后的内容。

标签:变量,作用域,可见,生存期,static,标识符,定义
From: https://blog.csdn.net/2401_84308772/article/details/140749259

相关文章

  • Tkinter 的带有 wrap=none 的文本无法水平滚动超过可见行的宽度
    当我注意到如果长行不可见时,ScrolledText小部件的水平滚动条将消失时,我一直在修改PAGE滚动小部件的实现。事实证明这与水平滚动条无关,是原始Tk行为:pathNamexview返回包含两个元素的列表。每个元素都是0到1之间的实数分......
  • 变量与作用域
    intglobal=100;//外部链接,所有文件皆可访问。staticintone_file=50;//内部链接,static关键字,单文件可以使用voidfunction2(){staticintcount=0;//无连接,函数内部使用。静态变量。}//上述三种变量作用时间是程序执行开始到结束。所有静态变量不初始化都会被设定为02......
  • 标识符
    一、标识符标识符就是我们编程的时候使用的“名字“,给类、接口、方法、变量、常量名,包名等起名字的字符序列。二、命名规则只能由字母(大小写,26个英文字母)、数字(0~9)、下划线“_”和“$”符组成。数字不可以开头。不可以使用关键字和保留字,但是可以包含关键字和保留......
  • [深入理解Java虚拟机]原子性/可见性/有序性
    原子性、可见性与有序性Java内存模型是围绕着在并发过程中如何处理原子性、可见性和有序性这三个特征来建立的,我们逐个来看一下哪些操作实现了这三个特性。原子性(Atomicity)由Java内存模型来直接保证的原子性变量操作包括read、load、assign、use、store和write这六个,我们大......
  • 标识符的命名规则
    标识符:就是给类,接口,方法,变量等起名字时使用的字符序列起名字时的规则(法律):1.英文大小写字母2.数字字符3.$和_起名字时的规范(道德):1、不能以数字开头2、不能是关键字3、不能除$和_以外的特殊符号出现4、要见名知意(推荐是英语单词构成,拼音构成)常见......
  • 标识符定义以及命名规则(驼峰命名法)
    标识符定义:就是用来给类、方法、变量命名的名字要求:做到见名知意命名规则硬性要求组成:数字、字母、$和_(美元符和下划线)不能以数字开头不能使用关键字区分大小写软性要求——驼峰命名法(1)小驼峰命名法:方法、变量只有一个单词时、全部小写有多个单词时......
  • Python中以函数为作用域
    点击查看代码#第一题foriteminrange(10):#不报错,没有函数,所有操作在全局作用域里面执行,item最后赋值为:9,此时item在缩进与全局都可以使用passprint(item)#第二题item=10deffunc():foriteminrange(10):#优先在本地查找,找不到在到全局查找p......
  • Java内存模型全解析:解决共享变量可见性与指令重排难题
    本期说一下Java内存模型(JavaMemoryModel,JMM)及共享变量可见性问题。“以下内容出自本人整理的面试秘籍。点击此处,无套路免费获取面试秘籍JMM是什么?答:Java内存模型(JavaMemoryModel,JMM)抽象了线程和主内存之间的关系就比如说线程之间的共享变量必须存储在主内存......
  • python之名称空间和作用域(关键字:global和nonlocal的使用)
    文章目录前言1、名称空间和作用域1.1引言1.2名称空间1.2.1内置名称空间1.2.2全局名称空间1.2.3局部名称空间1.2.4名称空间的产生和销毁顺序1.3作用域1.3.1全局作用域1.3.2局部作用域1.3.3名字的查找顺序1.4关键字:global1.5关键字:nonlocal前言本篇文章......
  • learncpp-7 作用域、生存期、链接
    7作用域、生存期、链接用户自定义命名空间和范围解析运算符为了避免命名冲突,在尽可能小的作用域内定义标识符一个命名空间要么在全局作用域内定义,要么在另一个命名空间内定义使用范围解析运算符::可以告诉编译器去指定命名空间查找指定标识符(如果::前没有命名空间则表示全......