|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
domanda su volatile
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:
Codice:
int *** lol; se io scrivo così: Codice:
volatile int ***lol; |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4747
|
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 <
__________________
Jappilas is a character created by a friend for his own comic - I feel honored he allowed me to bear his name Saber's true name belongs to myth - a Heroic Soul out of legends, fighting in our time to fullfill her only wish Let her image remind of her story, and of the emotions that flew from my heart when i assisted to her Fate
Ultima modifica di jappilas : 17-05-2007 alle 09:59. |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
(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.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#4 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
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? |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Dovrebbe essere corretto. Si riferisce all'intera roba che lo precede.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#6 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
grazie
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:30.











<









