您的位置:首页 > 编程语言 > C语言/C++

C++作用域和生存期

2017-02-02 20:49 239 查看

一、变量的作用域和生存期

变量分为两种:
局部变量
全局变量
:在大括号内出现的变量的都是
局部变量
,其
作用域
是该大括号内部,其
生存期
也是该大括号内;在大括号外面定义的变量都是
全局变量
作用域
为从定义变量的位置到该
源文件
结束,但是
生存期
为整个程序的运行时间。
局部变量
作用域
无法改变,
生存期
可以通过在定义局部变量时前面加上
static声明
,将变量变为
静态局部变量
,将其
生存期
扩展为整个程序的运行时间,而作用域不变。对
静态局部变量
的赋值是在编译时进行的,即只赋值一次,以后每次调用该变量时不再重新赋值而只保留上一次调用结束的值。
全局变量
生存期
无法改变,但是如果需要将该全局变量的作用域扩展到
本源文件中该变量定义之前
或是
其他源文件
,需要使用extern在使用该变量时进行声明;如果需要将该变量限制只在本源文件中使用,需要在变量定义是前面加上
static
,该变量变为
静态全局变量
否则在其他文件中出现同名的变量时会出现编译错误。

二、函数的作用域和生存期

函数本质上是全局的,和全局变量的性质类似。函数的作用域为从定义该函数到该
源文件
结束,如果想扩展该函数的作用域,将该全局变量的作用域扩展到
本源文件中该函数定义之前
或是
其他源文件
,需要使用
extern+函数原型
在使用该函数时进行声明,C++允许省写extern,
extern+函数声明
就变成了
函数声明
。因此
函数声明
的作用就是扩展函数的使用范围的。函数原型通知编译系统该函数在本文件中稍后定义,或是在另一个文件中定义。

利用函数原型扩展函数作用域最常见的例子是
#include
指令的应用。例如在程序中需要调用
sin
函数,但三角函数并不是由用户在本文件中定义的,而是存放在数学库中的。头文件cmath包括了对应的函数原型,用户只需用
#include<cmath>
指令就可以合法的调用各种数学库函数了。

extern(对于函数就是函数原型)查找
函数
变量
的顺序是:先在
本源文件中
查找,如果有,则将其作用域扩展到本行开始;如果本文件中无此
函数
全局变量
,则在程序
链接时
从其他文件找有无此
函数
全局变量
,如果有,则把在另一文件中定义的的
函数
全局变量
扩展到本文件,在本文件中合法的引用该
函数
全局变量


无论是函数还是变量
,在使用它时,我们都需要检查它们
在之前是否已经被定义
,如果没有定义就需要检查它们是否已经被声明。既没有定义也没有声明的语句在C++中是错误的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: