我读过这个问题,我想我已经理解了最赞成的答案,但他说
因为基本上今天广泛使用的每种编程语言都使用 词法范围
我也从coursera编程语言中听到了这一点,但这里有一个简单的C代码:
#include <stdio.h>
int x = 1;
void fun(){
printf("%dn", x);
}
void dummy1(){
x = 2;
fun();
}
void dummy2(){
x = 3;
fun();
}
int main(){
x = 4;
fun();
dummy1();
dummy2();
return 0;
}
输出:
4
2
3
C++具有完全相同的行为,所以我认为 C 和 C++ 是动态作用域语言,是吗?大多数编程语言使用静态作用域是真的吗?
您拥有的不是动态范围。您没有引入任何新变量,而是使用相同的全局变量。如果 C 和 C++ 具有动态作用域,则这样做(请注意,每个x
都是一个新变量):
#include <stdio.h>
int x = 1;
void fun(){
printf("%dn", x);
}
void dummy1(){
int x = 2;
fun();
}
void dummy2(){
int x = 3;
fun();
}
int main(){
int x = 4;
fun();
dummy1();
dummy2();
return 0;
}
将输出
4
2
3
但相反,它输出
1
1
1
由于fun()
始终使用相同的全局x
初始化为 1。这是因为 C 和 C++ 使用静态词法范围。