En C90, la taille d'un tableau doit être constante. Même une déclaration aussi simple que la suivante est refusée par la norme (même si GCC l'accepte par défaut) :
const int S = 42; int main() { int T[S]; // ... }
(Le programme redevient correct si on utilise #define S 42
à la
place du const int).
En C99, la taille des tableaux n'est plus nécessairement connue à la compilation, même si elle doit bien sûr être connue à l'instanciation du tableau. Le programme ci-dessus est autorisé, de même que :
void f(int m) { int T[m]; // instanciation d'un tableau de taille m // ... int T2[T[42]]; }