volatile unsigned int io;

Der Typmodifizierer volatile teilt dem Compiler mit, dass diese Variable möglichst nicht in ein Register geladen werden soll.

Das kann Hilfreich sein bei z.B. Sensorwerten, die nicht direkt im C-Programm verändert werden. Würden die in ein Register geladen, so könnte eine Veränderung der Werte unverändert bleiben:

volatile int HardwareZustand;
 
while (HardwareZustand != 255)
    ;