Dynamic 给定代码的静态和动态范围

Dynamic 给定代码的静态和动态范围,dynamic,scope,static,scoping,Dynamic,Scope,Static,Scoping,我正在学习静态和动态范围界定之间的区别,但是我迷路了 { int x=0; void fie(int n){ x=n+1; } fie(3) write(x); { int x=0; fie(3); write(x); } write(x); } 我不明白为什么上面的代码输出为0。这应该是什么语言?它看起来很像C,但它不是有效的C。我猜它是某种类型的伪代码。。。我在一

我正在学习静态和动态范围界定之间的区别,但是我迷路了

{
    int x=0;
    void fie(int n){
        x=n+1;
    }
    fie(3)
    write(x);
    {
        int x=0;
        fie(3);
        write(x);
    }
    write(x);
}

我不明白为什么上面的代码输出为0。

这应该是什么语言?它看起来很像C,但它不是有效的C。我猜它是某种类型的伪代码。。。我在一本书中找到了它,但它没有解释好,如果不了解语言,就不可能说代码以任何给定的方式工作。我认为它应该是C,因为主题是命令式范例,那么代码是无效的,所以如果它给出的输出为0,答案是“因为你的编译器很古怪。”也许我在问语言的问题时很挑剔,但问题是,一段代码只表示语言所说的意思。据我所知,在任何C标准中都没有任何规则来涵盖这段代码,所以它在标准C中没有任何作用。