[array statici con elementi static] RISOLTO

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
astrifiammante
Prode Principiante
Messaggi: 17
Iscrizione: domenica 31 maggio 2015, 18:06
Distribuzione: 12.4
Sesso: Maschile

[array statici con elementi static] RISOLTO

Messaggio da astrifiammante »

Salve a tutti. Avrei una curiosità da chiedervi inerente alla programmazione in c++. Mi è capitato in un programma di dover definire un array statico, i cui elementi dovrebbero essere variabili statiche la cui dimensione l'ho definita come variabile globale, ovvero:

Codice: Seleziona tutto

 
int dim = 10;
....................

void function
{
     static int array[dim];
...............
}

int main()
{
...........
}
Il compilatore mi da errore dicendomi che la dimensione del vettore (statico) non è costante, ovvero da come ho capito la dimensione dell'array statico viene stabilita a run time invece che a compile time. Se nel codice sopra levo lo spec. static tutto fila liscio. Ora so che la soluzione immediata è lavorare con array dinamici, ma non riesco a capire perchè nel caso usi static sorge un errore di run time, mentre quando tolgo static siamo esattamente in compile time. PS: per ovviare a tale inconveniente ho provato a introdurre la dimensione con un define oppure definendo const int dim = 10 e in tali casi fila liscio. Non riesco a capire il perchè in un caso siamo in run time e e nell'altro in compile time
Ultima modifica di astrifiammante il martedì 7 marzo 2017, 18:14, modificato 1 volta in totale.
ixamit
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 499
Iscrizione: giovedì 14 novembre 2013, 10:16

Re: array statici con elementi static

Messaggio da ixamit »

Un'allocazione statica e' sempre compile time, inizializzata a zero sullo storico segmento bss.
Togliendo la keyword static l'allocazione locale del tuo esempio avviene a run time nello stack.

Se devi allocare un vettore statico devi usare delle costanti (non le keyword const)

Codice: Seleziona tutto

static int foo[10];
 .... oppure ....
#define DIM 10
static int foo[DIM];

Codice: Seleziona tutto

$ objdump -x a.out | grep foo
0000000000201040 l     O .bss	0000000000000028              foo.2874
astrifiammante
Prode Principiante
Messaggi: 17
Iscrizione: domenica 31 maggio 2015, 18:06
Distribuzione: 12.4
Sesso: Maschile

Re: array statici con elementi static

Messaggio da astrifiammante »

ti ringrazio ixamit per il chiarimento
Avatar utente
Mdfalcubo
Moderatore Globale
Moderatore Globale
Messaggi: 20420
Iscrizione: venerdì 26 dicembre 2008, 11:17
Desktop: Solo XFCE
Distribuzione: Xubuntu 64 bit
Sesso: Maschile

Re: [array statici con elementi static] RISOLTO

Messaggio da Mdfalcubo »

il tag va messo al risolto, non al titolo...modifica per favore...
[Risolto] TITOLO DEL POST
"Il genere umano è stimolante, è la gente che non sopporto,, (Linus - Peanuts)
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 5 ospiti