Innanzitutto tieni presente che gli array a size variabile sono una caratteristica introdotta nello standard C99, non in quello originario (C89). Tale standard è implementato da diversi compilatori, ma comunque non sempre (anzi quasi mai) in maniera completa (leggi qui).
Ora il mingw (il compilatore del Dev), derivando dal gcc, consente di dichiarare array (e matrici quindi) a lunghezza variabile, quindi in teoria quello che fai sarebbe anche corretto (a limite fai strumenti -> opzioni di compilazione e aggiungi il flag -std=c99 alla fase di compilazione); il punto è che il gcc (e presumibilmente anche il mingw quindi) implementa la caratteristica degli array a size variabile allocandoli nello stack della memoria del processo, non nel data segment, quindi in conclusione *puoi* dichiarare array a size variabili ma *non puoi* dichiararli globali, devono necessariamente essere dichiarati in una funzione.

Ovviamente però, poiché il C99 non è implementato da tutti i compilatori (o almeno non in maniera completa), è meglio starvi lontani il più possibile, senza contare che poi forse il mondo non aveva bisogno degli array a size variabile.