c / intermediate
Snippet
Der volatile Typ-Qualifizierer
Das Schlüsselwort 'volatile' teilt dem Compiler mit, dass sich der Wert einer Variablen jederzeit ändern kann, ohne dass der umgebende Code eine Aktion ausführt. Dies verhindert, dass der Compiler Optimierungen anwendet, die das erneute Lesen des Speicherorts überspringen könnten, was für Memory-Mapped I/O oder Signalverarbeitung entscheidend ist.
snippet.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>// Imagine this variable is modified by hardware or a signal handlervolatile int status_flag = 0;void wait_for_ready() {printf("Waiting...\n");while (status_flag == 0) {// The compiler is forced to reload status_flag from memory in every iteration}printf("Ready!\n");}int main() {// status_flag = 1; // In a real scenario, this would happen externallyreturn 0;}
Erklärung
1
volatile int status_flag = 0;
Deklariert einen Integer, den der Compiler nicht optimieren oder in Registern zwischenspeichern darf.
2
while (status_flag == 0)
Stellt sicher, dass die Schleife jedes Mal die tatsächliche Speicheradresse prüft, selbst wenn es für den Compiler redundant erscheint.