Ho guardato questi e non risponde alla mia domanda:gcc si lamenta: oggetto variabile di dimensioni non può essere inizializzato
variable-sized object may not be initialized
C compile error: "Variable-sized object may not be initialized"
Error: Variable-sized object may not be initialized. But why?
Sono cercando di scrivere un codice c
abbastanza portatile:
int main()
{
const int foo=13;
int bar[foo]={0};
return 0;
}
ottengo un errore di variable-sized object may not be initialized
quando si compila come c
codice utilizzando:
- gcc 4.3.4
- braccio-linux-gcc 4.4.5 gnueabi-
E se lo compilo come c
in VS2008 ottengo leggermente diversa error C2057: expected constant expression
comprendo che qui, il c
codice compilatore non riconosce const int foo=13;
essere veramente costante; per esempio potremmo avere
void a(int fool)
{
const int foo=fool;
int bar[foo]={0};
}
mi rendo anche conto che unlike the gcc compilers, il compilatore VS2008 non ha il concetto di C99 variable-length arrays. E che MS non ha menzionato alcun supporto futuro.
Eppure, cpp
codice di compilazione sia con gcc o MS compilatori è del tutto diverso/intelligente?!
E anche quello che non capisco per quanto riguarda la gccc
codice compilatore è:
(NB: in quest'ultimo caso, MSc
codice di compilazione fallisce; costantemente come con int bar[foo]={0};
)
Sul mio TDM-GCC 4.6.1 l'ultimo esempio ** non ** compila (di nuovo con "oggetto di dimensioni variabili non può essere inizializzato"). Inoltre non ho mai sentito parlare di VLA inizializzati da una lista di inizializzatori, è corretto C? Guardando dentro .. – Anthales
Per la parte della tua domanda sui compilatori MS questa non è l'unica caratteristica che manca, semplicemente non supporta C99. Dall'anno scorso c'è anche una versione più recente dello standard, C11, quindi ora mancano 2 versioni principali dietro. –
@ [anthales] (http://stackoverflow.com/users/1250595/anthales), grazie. hmm .. – violet313