c / expert
Snippet
Typ-generische Selektion mit _Generic
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 kontrollierenden Ausdrucks auswählt und so Polymorphismus ohne Laufzeit-Overhead ermöglicht.
snippet.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>#define print_val(x) _Generic((x), \int: "Integer: %d\n", \double: "Double: %f\n", \char*: "String: %s\n", \default: "Unknown type\n")int main() {int i = 10;double d = 3.14;printf(print_val(i), i);printf(print_val(d), d);return 0;}
Erklärung
1
#define print_val(x) _Generic((x), ...)
Definiert ein Makro, das den kontrollierenden Ausdruck 'x' verwendet, um einen Ergebnis-String auszuwählen.
2
int: "Integer: %d\n",
Wenn 'x' vom Typ int ist, wird dieser spezifische Format-String zur Kompilierzeit ausgewählt.
3
default: "Unknown type\n"
Bietet einen Fallback-Fall, falls der Typ von 'x' mit keinem der angegebenen Typen übereinstimmt.