C语言和它的同类语言在内的大多数语言使用静态作用域。
什么是块?
1在C/C++语言中,块是一种语句,块可以出现在任何地方。
2一个块包含了一个声明的序列,然后再跟着一个语句序列,这些声明和语句使用一对括号包围起来
3块可以在嵌套在另一个块内,这个嵌套特性称为块结构。(ps:但是不能在一个函数(方法)内部定义另一个函数(方法))
什么是变量和静态作用域
变量是指向存储中的某个特定的位置,静态策略是在编译时刻决定,如果通过阅读就可以确定一个声明的作用域,那么这个语言使用的就是静态作用域。
变量作用域的规则,如图1-1,C++代码片段:
#include<iostream>
using namespace std;
main()
{
int first = 1;
int second =1;
{
int second=2;
{
int first = 1;
cout<<first<<" "<<second<<endl;
}
{
int second =4;
cout<<first<<" "<<second<<endl;
}
cout<<first<<" "<<second<<endl;
}
cout<<first<<" "<<second<<endl;
}
图1-1
变量声明的作用域规则:如果变量名字X的声明块B属于块A的,那么A的作用域包括整个块B,但是以任意深度嵌套在A中(无论有多少重块),重新声明了变量x的所有块B不在A块的作用域范围。图1-2程序块结构示意图:
图1-2
考虑块B1中的声明 int first = 1,它的作用域包括整个块B1,如图1-2所示,但是前提(如果B1块中,比如嵌套在里面的块有自己相同变量名的声明,如B3,那么B1的作用域不包括B3)。同理其他变量也如此。从这个思路角度来看,其他任何程序语言里面,变量名的作用范围和这个原理相似的,对于出现相同变量名,值的问题,可以得到很好的解决,对于入门学习来说,区分它们就变得容易了。
图1-1代码输出结果: