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]];
}