PDA

View Full Version : domanda su volatile


71104
16-05-2007, 15:47
con che criterio in C si colloca volatile nella dichiarazione di un tipo puntatore al fine di decidere se la "volatilità" deve essere riferita al puntatore o al dato puntato? per esempio:

int *** lol;

dove metto volatile affiché ad essere volatile sia la variabile int finale, cioè ***lol? e dove lo metto affinché lo sia il puntatore semplice, ovvero **lol? e quello doppio, ovvero *lol? e quello triplo, ovvero lol stessa?

se io scrivo così:

volatile int ***lol;

ad essere volatile è il puntatore triplo, vero?

jappilas
16-05-2007, 16:11
che io sappia l' uso di volatile si applica all' effettivo dato soggetto ad essere modificato in modo non prevedibile in qualunque momento ( ad es da più thread concorrenti) - il punto è che se una variabile non è dichiarata esplicitamente come volatile, i punti in cui essa è utilizzata come condizione di controllo di flusso, possono essere alterati dal compilatore ottimizzante...

>EDIT - parte che ricordavo male :fagiano: <

ilsensine
17-05-2007, 09:53
dove metto volatile affiché ad essere volatile sia la variabile int finale, cioè ***lol? e dove lo metto affinché lo sia il puntatore semplice, ovvero **lol? e quello doppio, ovvero *lol? e quello triplo, ovvero lol stessa?

se io scrivo così:

volatile int ***lol;

ad essere volatile è il puntatore triplo, vero?
No, viene letto come
(volatile int) ***

Per rendere volatile il puntatore triplo, dovresti scrivere
int *** volatile
che viene interpretato appunto
(int ***) volatile

Per dichiarare un puntatore a un puntatore volatile a int, dovresti scrivere
int * volatile *
eccetera.

71104
17-05-2007, 14:33
ok, quindi se ho capito bene:

int *** volatile asd; // puntatore volatile a puntatore doppio a int
int ** volatile *asd; // puntatore a puntatore volatile a puntatore a int
int * volatile **asd; // puntatore doppio a puntatore volatile a int
int volatile ***asd; // puntatore triplo a int volatile
volatile int ***asd; // idem come sopra

è tutto giusto? in altre parole, il volatile si riferisce all'asterisco che lo precede immediatamente?

ilsensine
17-05-2007, 16:11
Dovrebbe essere corretto. Si riferisce all'intera roba che lo precede.

71104
17-05-2007, 16:13
grazie :)