My point was that gcc has (I believe) accepted variable length arrays for some time (as a non-standard language extension). Not just for C99. So the fact that it accepts variable length arrays tells us nothing with respect to C99. That it then complains that you're declaring a variable within a for loop (which is only permitted in C99, not C89) ...