*/

}Problem pojawia się, gdy foo reprezentuje na przykład pewną lokację w pamięci, która może być zmieniona przez inne elementy systemu w dowolnej chwili (np. rejestr urządzeń lub CPU). Powyższy kod nigdy nie wykryłby takiej zmiany — bez volatile kompilator zakłada, że tylko bieżący program może zmienić wartość foo. Aby zapobiec intruzyjnej optymalizacji kompilatora należy zastosować volatile w następujący sposób:static volatile int foo;

void var(void) { foo = 0;

while (foo != 255){ /* ... */

}W powyższym wypadku kompilator wygeneruje kod, który za każdym razem, gdy będziemy próbowali odczytać wartość zmiennej foo, załaduje jej wartość z oryginalnego miejsca w pamięci (zamiast chociażby korzystać z wartości zapisanej w pamięci cache). Mechanizm ten jest często wykorzystywany w systemach wbudowanych do pobierania danych ze sprzętowych modułów wbudowanych w mikrokontrolery (np. przetwornika analogowo-cyfrowego).