C · Experte
Strict Aliasing erlaubt es dem Compiler anzunehmen, dass Zeiger unterschiedlicher Typen nicht denselben Speicherbereich referenzieren. Der 'restrict'-Qualifizierer (C99) informiert den Compiler exp…
performancebestpractices
Snippet öffnen →C · Experte
Ein flexibles Array-Member ist eine Array-Deklaration ohne Größe am Ende einer Struktur. Es ermöglicht eine einzige zusammenhängende Speicherreservierung sowohl für die Metadaten (Header) als auch…
arraysmemory
Snippet öffnen →C · Experte
Der 'volatile'-Qualifizierer verhindert, dass der Compiler den Wert einer Variablen in einem Register zwischenspeichert, und zwingt ihn, jedes Mal aus dem Speicher zu lesen. 'sig_atomic_t' ist ein…
syntaxmemory
Snippet öffnen →C · Experte
Das X-Makro-Muster ist eine leistungsstarke Präprozessor-Technik, um mehrere zusammengehörige Listen (wie Enums, Strings oder Switch-Cases) synchron zu halten. Man definiert eine Liste einmal und '…
syntaxbestpractices
Snippet öffnen →C · Experte
Opaque Pointer (oft als 'Handles' oder PIMPL-Idiom bezeichnet) ermöglichen eine vollständige Datenkapselung in C. Indem im Header nur eine Vorwärtsdeklaration bereitgestellt und die Struktur in der…
functionsbestpractices
Snippet öffnen →C · Experte
Verwendet C11's stdatomic.h für ein lock-freies Update. atomic_compare_exchange_weak prüft, ob der aktuelle Wert mit 'expected' übereinstimmt; falls ja, wird er auf 'desired' gesetzt. Falls nicht,…
memoryperformance
Snippet öffnen →C · Experte
Compound Literals ermöglichen die Erstellung unbenannter Objekte im laufenden Betrieb. Sie sind L-Werte, was bedeutet, dass man sogar ihre Adresse abrufen kann. Dies ist äußerst nützlich, um komple…
syntaxmemory
Snippet öffnen →C · Experte
Der Identifikator __VA_ARGS__ wird in der Makro-Expansion verwendet, um die an das Makro übergebenen variablen Argumente darzustellen. Dies erlaubt die Erstellung mächtiger Wrapper um Funktionen wi…
syntaxfunctions
Snippet öffnen →C · Experte
Eingeführt in C11, erlaubt _Static_assert die Prüfung von Bedingungen zur Compile-Zeit anstatt zur Laufzeit. Wenn der Ausdruck falsch ist, generiert der Compiler einen Fehler mit dem angegebenen St…
syntaxbestpractices
Snippet öffnen →C · Experte
Benannte Initialisierer (Designated Initializers) erlauben es, spezifische Array-Indizes oder Struktur-Member per Namen/Index zu initialisieren. Bei Arrays ist dies besonders nützlich, um nicht-seq…
syntaxarrays
Snippet öffnen →C · Experte
Der in C11 eingeführte Speicherklassenspezifizierer _Thread_local definiert Variablen mit Thread-Speicherdauer. Jeder Thread erhält seine eigene separate Instanz der Variable, die einmal pro Thread…
memoryperformance
Snippet öffnen →C · Experte
Die Verwendung eines Zeigers auf ein Array mit variabler Größe (VLA) als Funktionsparameter ermöglicht eine natürliche mehrdimensionale Indizierung (matrix[i][j]) unter Beibehaltung der Typsicherhe…
arraysfunctions
Snippet öffnen →C · Experte
Das Schlüsselwort _Noreturn (C11) gibt an, dass eine Funktion nicht zu ihrem Aufrufer zurückkehrt, typischerweise weil sie das Programm beendet oder einen Long-Jump ausführt. Dies dient dem Compile…
functionscontrolflow
Snippet öffnen →C · Experte
In C lösen arithmetische Operationen auf Typen, die kleiner als 'int' sind (wie char oder short), eine 'Ganzzahl-Promotion' aus, bei der der Operand zuerst in ein 'int' konvertiert wird. Das Ausfüh…
datatypessyntax
Snippet öffnen →C · Experte
Das Ergebnis der Subtraktion zweier Zeiger ist vom vorzeichenbehafteten Ganzzahltyp 'ptrdiff_t'. Diese Operation ist nur definiert, wenn beide Zeiger auf Elemente desselben Arrays oder auf das Elem…
memorydatatypes
Snippet öffnen →C · Experte
Eingeführt in C11, bietet _Generic eine Möglichkeit, typ-generische Makros zu schreiben. Es fungiert wie eine Switch-Anweisung zur Kompilierzeit, die einen Ausdruck basierend auf dem Typ eines kont…
syntaxfunctions
Snippet öffnen →C · Experte
setjmp und longjmp ermöglichen nicht-lokale Sprünge, die den standardmäßigen Funktionsaufruf- und Rückgabemechanismus umgehen. Dies wird häufig verwendet, um eine Ausnahme-ähnliche Fehlerbehebung z…
controlflowfunctions
Snippet öffnen →C · Experte
Opake Pointer (oder 'PIMPL' in C) verbergen die Implementierungsdetails eines Structs vor dem Benutzer. Durch die Bereitstellung nur einer Vorwärtsdeklaration im Header verhindert der Compiler, das…
oopbestpractices
Snippet öffnen →C · Experte
X-Makros sind eine Präprozessor-Technik zur Generierung von repetitivem Code aus einer einzigen Master-Liste. Dies stellt sicher, dass Enums, String-Arrays und andere verwandte Strukturen synchron…
syntaxbestpractices
Snippet öffnen →C · Experte
Flexible Array-Elemente (eingeführt in C99) erlauben es einer Struktur, mit einem Array ohne feste Größe zu enden. Diese Technik ermöglicht es, mit einer einzigen Heap-Allokation sowohl den Metadat…
memoryarraysdatatypes
Snippet öffnen →C · Experte
Bitfelder ermöglichen die Definition von Strukturmerkmalen mit expliziter Bitbreite. Dies ist essenziell für die hardwarenahe Programmierung oder das Komprimieren von Daten für Netzwerkprotokolle.…
memoryperformancedatatypes
Snippet öffnen →C · Experte
Funktionszeiger ermöglichen Polymorphie in C. Durch die Verwendung von 'void*'-Parametern in einer Callback-Signatur können generische Algorithmen (wie qsort) erstellt werden, die auf jedem Datenty…
functionsbestpractices
Snippet öffnen →C · Experte
'sig_atomic_t' ist ein Ganzzahltyp, auf den selbst bei asynchronen Interrupts (Signalen) atomar zugegriffen werden kann. In Kombination mit 'volatile' wird verhindert, dass der Compiler die Variabl…
performancememorydatatypes
Snippet öffnen →