c++cscopingdynamic-scope

Static scoping in C/C++


In the following code, 2 is printed.

int x = 1;
int f(int y)
{
    return x;
}

int main() {
    x = 2;
    printf("%d", f(0));
}

How is it happening if we have static scoping in C? Why isn't 1 printed?

Printing 2 in this case isn't a dynamic scoping, is it?

I thought that in static scoping it should take the nearest x to the function definition.


Solution

  • It does take the nearest x, but since you only have one x it doesn't really matter.

    If you change the code to

    int x = 1;
    int f(int y)
      {
        return x ;
      }
    
    int main() {
        int x=2;       
        printf("%d", f(0));
    }
    

    so you have 2 x, the global one and the local one in main you will see 1 getting printed.