2009-07-01 14 views

Antwort

1

Volatile weist den Compiler grundsätzlich an, keine Optimierungen für das "Objekt" vorzunehmen, auf das Sie es anwenden.

Dies ist nützlich, wenn das Objekt außerhalb des Bereichs des Programms geändert werden kann.

Ein Beispiel (und es gibt andere) ist mit eingebetteten Systemen. Angenommen, Sie haben ein Gerät mit einer Tastatur mit Speicherabbild. Wenn der Benutzer eine Taste drückt, wird der ASCII-Code für diese Taste beispielsweise in der Speicherstelle 0xff00 angezeigt.

So beginnen Sie mit dem Code:

char *kbdata = 0xff00; 

dann, wenn Sie für einen Schlüssel warten wollen gedrückt werden, können Sie abfragen:

char key = *kbdata; 
while (key == 0) 
    key = *kbdata; 

Das einzige Problem dabei ist, dass die Compiler kann herausfinden, dass nichts im Code *kbdata ändert, so dass es die Zugriffe optimieren kann, so dass der Code nicht mehr funktioniert. Am wahrscheinlichsten wird es *kbdata einmal in Schlüssel laden und dann eine Endlosschleife eingeben.

Durch Angabe von kbdata als flüchtig, wird der Compiler sicherstellen, dass es nicht versucht, Zugriffe darauf zu optimieren, und der Code sollte wie erwartet funktionieren.

Verwandte Themen