c / expert
Snippet
Typ-generische Makro-Auswahl über das C11 _Generic Keyword
Das in C11 eingeführte Keyword _Generic wertet den Datentyp eines Steuerausdrucks zur Kompilierzeit aus und wählt den entsprechenden zugeordneten Ausdruck. In Kombination mit Präprozessor-Makros ermöglicht _Generic eine Funktionsüberladung in C basierend auf Argumenttypen, ohne Laufzeit-Overhead zu erzeugen.
snippet.c
c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>void print_int(int val) { printf("Integer: %d\n", val); }void print_double(double val) { printf("Double: %.2f\n", val); }void print_unknown(void *val) { (void)val; printf("Unknown type\n"); }#define print_value(X) _Generic((X), \int: print_int, \double: print_double, \default: print_unknown \)(X)int main(void) {print_value(42);print_value(3.14);return 0;}
Erklärung
1
#define print_value(X) _Generic((X), \
Startet das typ-generische C11-Makro basierend auf dem statischen Typ des Ausdrücke X.
2
int: print_int, \
Ordet dem Integer-Typ den Funktionszeiger print_int zu.
3
default: print_unknown \
Definiert die Fallback-Zuordnung, falls X mit keinem explizit aufgelisteten Typ übereinstimmt.