今天的主流编程语言主要使用动态还是静态(词汇)作用域?



我读过这个问题,我想我已经理解了最赞成的答案,但他说

因为基本上今天广泛使用的每种编程语言都使用 词法范围

我也从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++ 使用静态词法范围。

最新更新