标识符的作用域与可见性

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

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中预处理后的内容。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值