C++作用域和生存期
2017-02-02 20:49
239 查看
一、变量的作用域和生存期
变量分为两种:局部变量和
全局变量:在大括号内出现的变量的都是
局部变量,其
作用域是该大括号内部,其
生存期也是该大括号内;在大括号外面定义的变量都是
全局变量,
作用域为从定义变量的位置到该
源文件结束,但是
生存期为整个程序的运行时间。
局部变量的
作用域无法改变,
生存期可以通过在定义局部变量时前面加上
static声明,将变量变为
静态局部变量,将其
生存期扩展为整个程序的运行时间,而作用域不变。对
静态局部变量的赋值是在编译时进行的,即只赋值一次,以后每次调用该变量时不再重新赋值而只保留上一次调用结束的值。
全局变量的
生存期无法改变,但是如果需要将该全局变量的作用域扩展到
本源文件中该变量定义之前或是
其他源文件,需要使用extern在使用该变量时进行声明;如果需要将该变量限制只在本源文件中使用,需要在变量定义是前面加上
static,该变量变为
静态全局变量,否则在其他文件中出现同名的变量时会出现编译错误。
二、函数的作用域和生存期
函数本质上是全局的,和全局变量的性质类似。函数的作用域为从定义该函数到该源文件结束,如果想扩展该函数的作用域,将该全局变量的作用域扩展到
本源文件中该函数定义之前或是
其他源文件,需要使用
extern+函数原型在使用该函数时进行声明,C++允许省写extern,
extern+函数声明就变成了
函数声明。因此
函数声明的作用就是扩展函数的使用范围的。函数原型通知编译系统该函数在本文件中稍后定义,或是在另一个文件中定义。
利用函数原型扩展函数作用域最常见的例子是
#include指令的应用。例如在程序中需要调用
sin函数,但三角函数并不是由用户在本文件中定义的,而是存放在数学库中的。头文件cmath包括了对应的函数原型,用户只需用
#include<cmath>指令就可以合法的调用各种数学库函数了。
extern(对于函数就是函数原型)查找
函数和
变量的顺序是:先在
本源文件中查找,如果有,则将其作用域扩展到本行开始;如果本文件中无此
函数或
全局变量,则在程序
链接时从其他文件找有无此
函数或
全局变量,如果有,则把在另一文件中定义的的
函数或
全局变量扩展到本文件,在本文件中合法的引用该
函数或
全局变量。
无论是函数还是变量,在使用它时,我们都需要检查它们
在之前是否已经被定义,如果没有定义就需要检查它们是否已经被声明。既没有定义也没有声明的语句在C++中是错误的。
相关文章推荐
- C++中四种对象生存期和作用域以及static用法总结
- C++回顾之static用法总结、对象的存储,作用域与生存期
- C++中变量生存期,作用域,存储位置总结
- C++ 标识符作用域以及对象生存期
- C++回顾之static用法总结、对象的存储,作用域与生存期
- C++中四种对象生存期和作用域以及static的用法总结分析
- (转-经典-数据段)C++回顾之static用法总结、对象的存储,作用域与生存期
- 存储类型、作用域、可见性和生存期C++
- C/C++的变量生存期和作用域
- c++的 程序实体 作用域 名空间 变量生存期概念理解
- C++中的生存期和作用域
- [C/C++]函数重载、作用域、隐藏
- stdafx.h在C++中起到的作用是什么?
- C++中Static作用和使用方法
- C++基础之extern “C”的作用
- C++ 中stdafx.h中文意思,并且在C++中起到的作用是什么?
- C++中Static作用和使用方法
- 《The C++ Standard Library》第39页 make_pair的作用
- C++中虚析构函数的作用(1)(转)
- --C++ 中stdafx.h中文意思,并且在C++中起到的作用是什么?