C++作用域和生存期

来源:互联网 发布:京东刷单辅助软件v2.0 编辑:程序博客网 时间:2024/06/05 18:39

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

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

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

  • 函数本质上是全局的,和全局变量的性质类似。函数的作用域为从定义该函数到该源文件结束,如果想扩展该函数的作用域,将该全局变量的作用域扩展到本源文件中该函数定义之前或是其他源文件,需要使用extern+函数原型在使用该函数时进行声明,C++允许省写extern,extern+函数声明就变成了函数声明。因此函数声明的作用就是扩展函数的使用范围的。函数原型通知编译系统该函数在本文件中稍后定义,或是在另一个文件中定义。
  • 利用函数原型扩展函数作用域最常见的例子是#include指令的应用。例如在程序中需要调用sin函数,但三角函数并不是由用户在本文件中定义的,而是存放在数学库中的。头文件cmath包括了对应的函数原型,用户只需用#include<cmath>指令就可以合法的调用各种数学库函数了。

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

无论是函数还是变量,在使用它时,我们都需要检查它们在之前是否已经被定义,如果没有定义就需要检查它们是否已经被声明。既没有定义也没有声明的语句在C++中是错误的。

1 0
原创粉丝点击