Eventuali duplicati:
Variably modified array at file scopearray lunghezza variabile (VLA) in C e C++
Ho alcuni concetti riguardanti la VLA e il suo comportamento che ho bisogno di chiarire.
Afik dal C99 è possibile dichiarare VLA in ambiti locali:
int main(int argc, char **argv)
{
// function 'main' scope
int size = 100;
int array[size];
return 0;
}
ma è vietato in ambiti globali:
const int global_size = 100;
int global_array[global_size]; // forbidden in C99, allowed in C++
int main(int argc, char **argv)
{
int local_size = 100;
int local_array[local_size];
return 0;
}
Il codice di cui sopra dichiara un VLA nel C99, perché il modificatore const
non crea un valore in fase di compilazione. In C++ global_size
è un valore in fase di compilazione quindi, global_array
non diventa VLA.
Quello che devo sapere è: il mio ragionamento è corretto? Il comportamento che ho descritto è corretto?
Voglio anche sapere: perché il VLA in ambito globale non è consentito? sono proibiti sia in C che in C++? Qual è la ragione per cui il comportamento degli array in ambito globale e locale era diverso?
Supponiamo che siano consentiti gli VLA globali. Quando viene definita la loro dimensione (variabile)? – cnicutar
@cnicutar bene ... come tutto il VLA, in tempo di esecuzione, come gli altri ambiti. So che questa non è la risposta, ma voglio sapere PERCHE '. –
http://stackoverflow.com/a/5052083/174605 – coelhudo