【发布时间】:2018-08-24 07:17:46
【问题描述】:
我已经阅读了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++ 是动态范围语言,是吗?大多数编程语言都使用静态作用域是真的吗?
【问题讨论】:
-
该答案中的完整句子是这可能是一个非常陌生的概念,因为今天广泛使用的每种编程语言(可能除了 emacs lisp 之外)都使用词法范围让您认为其中包括 C 和 C++(如果它们不同,将很难忘记)
-
所有这些函数都使用同一个全局变量。这没有显示动态范围。
-
动态范围是当您引入一个新变量(即
int x = 3)并且您调用的函数可以看到它时。在这里,您没有引入任何新变量,而是使用相同的全局变量。 -
这里只有一个 x 定义,所以 static lexical scoping 和 dynamic scoping 的行为无论如何都是一样的。 C 和 C++ 都使用静态词法作用域。
-
我真的认为你应该扩大你的语言词汇量并研究 LISP、SNOBOL、BASIC 和 ADA。并非所有语言都有范围规则。
标签: c++ c scope programming-languages