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…
PerformanceBest Practices
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…
Arrays & ListenMemory Management
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 Management
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 '…
SyntaxBest Practices
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…
FunktionenBest Practices
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,…
Memory ManagementPerformance
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 Management
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…
SyntaxFunktionen
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…
SyntaxBest Practices
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 & Listen
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…
Memory ManagementPerformance
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…
Arrays & ListenFunktionen
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…
FunktionenKontrollstrukturen
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…
DatentypenSyntax
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…
Memory ManagementDatentypen
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…
SyntaxFunktionen
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…
KontrollstrukturenFunktionen
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…
OOPBest Practices
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…
SyntaxBest Practices
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…
Memory ManagementArrays & ListenDatentypen
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.…
Memory ManagementPerformanceDatentypen
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…
FunktionenBest Practices
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…
PerformanceMemory ManagementDatentypen
Snippet öffnen →C · Experte
Nicht-lokale Sprünge ermöglichen es dem Steuerfluss, standardmäßige Funktionsaufrufe und Rücksprünge über den Aufruf-Stack hinweg zu umgehen. Der Aufruf von `setjmp` speichert den aktuellen Ausführ…
KontrollstrukturenFunktionenBest Practices
Snippet öffnen →C · Experte
Duff's Device ist eine berühmte Technik, die eine nach C-Standard valide Verschachtelung einer `switch`-Anweisung mit einer `do-while`-Schleife nutzt. Sie erzielt ein manuelles Schleifen-Unrolling…
KontrollstrukturenPerformanceSyntax
Snippet öffnen →C · Experte
Intrusive verkettete Listen betten Knoten-Zeiger direkt in Nutzdaten-Strukturen ein, anstatt Nutzdaten-Zeiger in separaten Listenknoten zu verpacken. Das `container_of`-Makro nutzt `offsetof` aus `…
Memory ManagementDatentypenArrays & Listen
Snippet öffnen →C · Experte
Ein Arena-Allocator nutzt lineare Bump-Allokation über einem festen Byte-Puffer, um Malloc-Overhead und Segmentierung zu vermeiden. Hochleistungssysteme erfordern an Hardware-Grenzen ausgerichtete…
Memory ManagementPerformanceBest Practices
Snippet öffnen →C · Experte
C11 führte das Schlüsselwort _Generic ein, das eine typbasierte Makro-Ausführung zur Kompilierzeit ohne Laufzeit-Overhead oder Name-Mangling ermöglicht. Der Compiler wertet den statischen Typ des S…
DatentypenFunktionenBest Practices
Snippet öffnen →C · Experte
Objektorientierte dynamische Methodenaufrufe können in Standard-C sauber implementiert werden, indem eine Basisstruktur geschachtelt wird, die einen Zeiger auf eine virtuelle Methodentabelle (VTabl…
OOPFunktionenBest Practices
Snippet öffnen →C · Experte
Fehlprognosen bei Verzweigungen in leistungskritischen Schleifen führen zu schwerwiegenden CPU-Pipeline-Flushes. Durch die Nutzung arithmetischer Bitverschiebungen zur Konstruktion von Vorzeichenma…
PerformanceBest Practices
Snippet öffnen →