c / intermediate
Snippet
Typ-Generische Auswahl mit _Generic
Das in C11 eingeführte Schlüsselwort '_Generic' bietet eine Möglichkeit, einen Typ-Dispatch zur Kompilierzeit durchzuführen. Es erlaubt einem Makro, basierend auf dem Typ seines Steuerausdrucks zu verschiedenen Ausdrücken zu evaluieren, was eine Form von Polymorphismus in reinem C ermöglicht.
snippet.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>#define print_type(x) _Generic((x), \int: "integer", \float: "float", \char*: "string", \default: "unknown")int main() {int a = 5;float b = 2.5f;char* c = "hello";printf("a is %s\n", print_type(a));printf("b is %s\n", print_type(b));printf("c is %s\n", print_type(c));return 0;}
Erklärung
1
_Generic((x), ...)
Startet die generische Auswahl basierend auf dem Typ des Ausdrucks 'x'.
2
int: "integer"
Gibt an, dass das Ergebnis des Ausdrucks "integer" ist, wenn 'x' vom Typ 'int' ist.
3
default: "unknown"
Bietet ein Fallback-Ergebnis, wenn der Typ von 'x' mit keinem der angegebenen Fälle übereinstimmt.