2012-12-19 5 views
5

Secondo questa defect report C++ 03 standard non garantisce che nel seguente codice:Che cos'è un modo compatibile con C++ 03 per prelevare un valore da una variabile volatile?

volatile int x; 
void f() { 
    x; 
} 

la variabile viene letta da.

Quindi come faccio a scrivere codice che legge il valore della variabile volatile e scarta il risultato (letto per ragioni di lettura)?

+1

Per curiosità, perché vuoi fare questo? –

+3

@AndreasBrinck Non so perché l'OP vorrebbe questo in particolare, ma è piuttosto comune nella programmazione embedded, dove si potrebbe voler leggere da un registro mappato in memoria, e quella lettura può causare alcuni effetti collaterali. –

+0

@Andreas Brinck: questo è necessario per far sì che il sistema operativo assegni effettivamente una pagina di memoria - l'allocazione è ritardata fino al primo accesso. – sharptooth

risposta

5

int i = x; dovrebbe funzionare. Questo codice richiede assolutamente la lettura della variabile volatile e all'ottimizzatore non è consentito ottimizzare la lettura. Ma dal momento che la variabile i non è utilizzata, l'ottimizzatore può evitare qualsiasi lavoro aggiuntivo coinvolto nella memorizzazione del valore letto.

Potrebbe anche essere necessario qualcosa di simile per evitare avvisi del compilatore: (void)i;

Problemi correlati