Mögliche Duplizieren:
What is the difference between these declarations in C?volatile in c
was Zweck flüchtig ist?
Mögliche Duplizieren:
What is the difference between these declarations in C?volatile in c
was Zweck flüchtig ist?
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.
Weitere Informationen finden Sie unter http://stackoverflow.com/questions/232472/what-is-the-difference-withthese-clarations-in-c – RBerteig
Siehe http://stackoverflow.com/questions/246127/why-is -volatile-benötigt-in-c – RBerteig