今天的主流编程语言大多使用动态或静态(词法)范围吗?

时间:2018-03-15 12:59:50

标签: c++ c scope programming-languages

我已经阅读了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 ++是动态范围的语言,是吗?大多数编程语言使用静态范围是真的吗?

1 个答案:

答案 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

而是it outputs

1
1
1

由于fun()始终使用初始化为1的相同全局x。这是因为C和C ++使用静态词法作用域。