'How can static array in C taking size in runtime?

I am mindblown by this small code:

#include <stdio.h>

    int main()
    {
        int limit = 0;
        scanf("%d", &limit);
        int y[limit];
        
        for (int i = 0; i<limit; i++ ) {
            y[i] = i;
        }
        
        for (int i = 0; i < limit; i++) {
            printf("%d ", y[i]); 
        }
    
        return 0;
    }

How on earth this program is not segment-faulting as limit (size of the array) is assigned at runtime only?

Anything recently changed in C? This code shouldn't work in my understanding.

c


Solution 1:[1]

This doesnt compile in visual studio because limit "Error C2131 expression did not evaluate to a constant"

If you make limit a constexpr though then the compiler will not mind because youre telling it it wont change. You cant use 0 though as setting an array to a constant size length zero is nonsence.

What compiler does this run on for you ?

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Tim Fosh