I think, it's because C++ provides superior solutions: std::vector<T>
and std::array<T,N>
(C++11); though the latter is not dynamic as such but it's superior to raw arrays. You can always know the size, no matter which function you pass the vector or array.
Since C cannot provide these solutions, C99 came up with Variable Length Array (VLA). It has the same problem as regular arrays: it decays into a pointer on passing it to function, and you no longer know the size of the array.
And as Florian Weimer asked here at comp.std.c++
that if C++0x allows VLA, then what would the following code mean?
int vla[n]; //n is known at runtime!
std::vector<decltype(vla)> v; //what does this mean?
How is the compiler going to instantiate the vector template at compile-time when it's type argument depends on n
which is known at runtime?