Oppure

Loading
28/07/11 10:15
Alex
Postato originariamente da arack95:

Postato originariamente da anthony015:

puoi benissimo dichiarare un array come hai fatto tu, ma non è di dimensione variabile, ma della dimensione di i al momento della dichiarazione, se in futuro cambi i, l'array resta sempre grande uguale...


Ma cazzarola dici? Se fà come ha fatto lui il compilatore dà errore chiedendo un int const.


non da errore se il compilatore è aderente allo standard c99 che permette che l'inizializzatore dell'array sia non costante...

EDIT: scusate non avevo visto la risposta in seconda pagina=)
Ultima modifica effettuata da Alex 28/07/11 10:16
aaa
28/07/11 12:38
arack95
Postato originariamente da pierotofy:

Ok ho fatto un po' di ricerca e credo che ci sia qualcosa da chiarire.

Gli array a lunghezza variabile sono una features "nuova" del C, introdotta solamente dallo standard C99.

Questa feature permette di usare codice del tipo:

int i;
scanf("%d",&i);
int array[i];


Lo spazio non si sa dove viene allocato, a volte sullo stack, a volte sull'heap, ma dipende dall'implementazione. GNU C Compiler utilizza lo stack (quello usato da dev-c++). Visual Studio non supporta lo standard C99, quindi non è nemmeno possibile usarlo. en.wikipedia.org/wiki/…

In linea definitiva, per andare sul sicuro, l'uso di calloc e malloc è sempre quello più consigliato.



L'ho appena notato pure io, sono rimasto sconvolto :om:
aaa
28/07/11 14:04
drewnik99
Che compilatore mi consigliate di usare per utilizzare a pieno le funzionalità del C99?
aaa
28/07/11 15:09
arack95
en.wikipedia.org/wiki/…
Qua ci sono i compilatori con il supporto al C99, potresti provare a vedere quelli con il supporto pieno
aaa
01/08/11 6:40
Questa caratteristica del linguaggio (come altre dello standard C99) si chiama

VLA - Variable Length Arrays

e viene supportata praticamente da tutti i compilatori *tranne* dal Visual C di Microsoft.

La Microsoft ha più volte dichiarato nel passato di non volere supportare lo standard C99 ma penso che, prima o poi, lo farà.

Il discorso è complesso, perché molte caratteristiche del C99 *non* sono state implementate nello standard del C++ e questo crea un bel po' di confusione.

Il fatto che sia una caratteristica molto usata dipende dal fatto che tanti di quelli che iniziano usano il DevC++ che utilizza la versione Windows di gcc (il mingw), il quale supporta il C99.

Chi ha sempre usato il Visual C si trova "spaesato" (come probabilmente arack...)