The answer to the first question is "because the language specification says so." Although the compiler can infer the size of the array, this requires some static analysis, which is not trivial if the size of the array is not a constant expression of compilation time.
, VLA : , I, , , , VLA , undefined. , ( ) ().
: :
, you (, Microsoft - C - , C99, 15 .). , C , C99. , C11, VLA ( ).
user529758