Der häufigste Fall in meiner Welt ist, wenn Sie Mikrocontroller programmieren, die Memory-Mapped I/O verwenden. Der Wert in einem Register könnte sich aufgrund von externen digitalen Eingängen ändern. Wenn Sie jedoch keine Variable als volatile
deklarieren, könnte der Compiler den Code vollständig optimieren, und Sie werden sich wundern, warum nichts funktioniert.
Matt schlug vor, dass ich auf der Aussage hinsichtlich des Codes, der "heraus optimiert wird" verschönern. Memory-Mapped I/O wird im Code über Zeiger angesprochen. Wenn Sie den Status einer Schaltfläche überprüfen möchten, werden Sie normalerweise bitweise den Wert des Registers mit der Bitmaske für die Schaltfläche UND. Wenn Sie nicht volatile angeben, sagt der Compiler: "hey, Ihr Code ändert den Wert dieses Zeigers nie wirklich, also werde ich diese Anweisung einfach entfernen, wo Sie sie bitweise UND-verknüpft haben, weil der Wert immer ist das Gleiche!".
Hoffentlich löscht dies meine Aussage ein wenig. Danke für den Vorschlag, Matt.
Siehe: http://stackoverflow.com/questions/2535148/volatile-qualifier-and-compiler-reorderings (Obwohl die andere Frage hat C++ und C-Tags erinnern, dass C++ dieses Schlüsselwort von C.) – dirkgently
Von Dr Dobbs - http://www.drdobbs.com/184403766;jsessionid=4HI2GRADWCN51QE1GHRSKHWATMY32JVN – pankajt
Siehe [ Warum wird volatile in c benötigt? ] (http://stackoverflow.com/questions/246127/why-is-volatile-needed-in-c). –