di pemrograman komputer, khususnya di C, C++ dan C#, suatu variabel atau objek yang dideklarasikan dengan keyword volatile biasanya memiliki properti khusus berkaitan dengan optimalisasi dan/atau threading. dalam bahasa umum, keyword volatile ditujukan untuk mencegah (pseudo) compiler dari penerapan optimalisasi apapun pada kode yang mengasumsikan nilai variabel-variabel tidak dapat berubah “oleh mereka sendiri”
definisi aktual dan aplikabel dari keyword volatile seringkali disalah-artikan dalam konteks bahasa C, dan karena C++, C# dan Java “mewarisi” volatile dari bahasa C, ada perbedaan besar dalam hal semantik dan penggunaan volatile pada masing-masing bahasa pemrogramman tersebut. maka kita akan membahas konteks keyword volatile dalam C.
dalam bahasa C dan C++, variabel volatile merupakan variabel yang nilainya dapat berubah karena faktor eksternal. dari fakta, hanya ada 3 macam faktor eksternal yang dapat mengubah nilai variabel, yaitu:
- memory-maped io (baca: alamat memory yang dipetakan untuk io, contoh di mcu 8051 pin 0 memiliki alamat 0x80).
- variabel global yang nilainya berubah karena interrupt service routine.
- variabel global dalam aplikasi multi-threaded.