我已经阅读了this个问题,我想我已经理解了最受欢迎的答案,但他说
因为现在基本上每种编程语言都广泛使用 词汇范围
我也是从coursera programming language听到的,但这是一个简单的C代码:
#include <stdio.h>
int x = 1;
void fun(){
printf("%d\n", 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 ++是动态范围的语言,是吗?大多数编程语言使用静态范围是真的吗?
答案 0 :(得分:3)
你所拥有的不是动态范围。您没有引入任何新变量,而是使用相同的全局变量。如果C和C ++有动态范围,那么这(注意每个x
是一个新变量):
#include <stdio.h>
int x = 1;
void fun(){
printf("%d\n", 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()
始终使用初始化为1的相同全局x
。这是因为C和C ++使用静态词法作用域。