3.6.6. Volatile

Mientras que el calificador const indica al compilador «Esto nunca cambia» (lo que permite al compilador realizar optimizaciones extra), el calificador volatile dice al compilador «Nunca se sabe cuando cambiará esto», y evita que el compilador realice optimizaciones basadas en la estabilidad de esa variable. Se utiliza esta palabra reservada cuando se lee algún valor fuera del control del código, algo así como un registro en un hardware de comunicación. Una variable volatile se lee siempre que su valor es requerido, incluso si se ha leído en la línea anterior.

Un caso especial de espacio que está «fuera del control del código» es en un programa multi-hilo. Si está comprobando una bandera particular que puede ser modificada por otro hilo o proceso, esta bandera debería ser volatile de modo que el compilador no asuma que puede optimizar múltiples lecturas de la bandera.

Fíjese en que volatile puede no tener efecto cuando el compilador no está optimizando, pero puede prevenir errores críticos cuando se comienza a optimizar el código (que es cuando el compilador empezará a buscar lecturas redundantes).

Las palabras reservadas const y volatile se verán con más detalle en un capítulo posterior.