La mia comprensione è sempre stata che quando dichiaro una matrice sullo stack con una dimensione che entra come variabile o parametro, dovrei ricevere un errore.Perché non viene visualizzato un errore di compilazione quando si dichiara un array C di dimensioni variabili?
Tuttavia, ho notato che non ottengo alcun errore se non si inizializza esplicitamente l'array (sì, non sarà in pila, ma mi chiedo in merito alla mancanza di errori). Ad esempio, il seguente codice non compila a causa di array2:
#define N 30
void defineArrays(int n)
{
int i,j;
int array1[N] = {};
int array2[n] = {};
for(i=0; i<N; ++i) array1[i] = 0;
for(j=0; j<n; ++j) array2[j] = 0;
}
Ma il seguente codice compilato ed eseguito, anche quando mando un vero n da principale:
#define N 30
void defineArrays(int n)
{
int i,j;
int array1[N] = {};
int array2[n];
for(i=0; i<N; ++i) array1[i] = 0;
for(j=0; j<n; ++j) array2[j] = 0;
}
Quello che mi manca Qui? Sta dichiarando array2 come un puntatore? Sto usando gcc
Aggiornamento: Grazie per tutti coloro che hanno risposto. Il problema era in effetti che la mia versione di gcc era predefinita per C99 per qualche strana ragione (o non così strana, forse sono solo troppo vecchia), e ho assunto erroneamente che fosse impostato su C90 a meno che non lo dicessi diversamente.
Accidenti, non ho realizzato default gcc a C99 ora. Ho usato g ++ per troppo tempo. – Uri
@Uri No +1 sulla tua domanda, a causa del tuo curseword. – Alex