c / expert
Snippet
Typgenerische Auswahl mit _Generic
Das in C11 eingeführte Schlüsselwort _Generic ermöglicht eine typbasierte Auswahl zur Kompilierzeit. Es wird häufig in Makros verwendet, um eine Form von Polymorphismus oder Funktionsüberladung bereitzustellen. Der Präprozessor wählt die entsprechende Funktion oder den Ausdruck basierend auf dem Typ des ersten an _Generic übergebenen Arguments aus.
snippet.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#define print(x) _Generic((x), \int: print_int, \double: print_double, \char*: print_string, \default: print_unknown \)(x)void print_int(int i) { printf("Int: %d\n", i); }void print_double(double d) { printf("Double: %f\n", d); }int main() {print(42); // Calls print_intprint(3.14); // Calls print_double}
Erklärung
1
_Generic((x),
Das Schlüsselwort, das die Auswahl basierend auf dem Ausdruck 'x' einleitet.
2
int: print_int,
Wenn 'x' vom Typ int ist, ergibt dieser Zweig den Funktionspointer 'print_int'.
3
)(x)
Der ausgewählte Funktionspointer wird sofort mit dem Argument 'x' aufgerufen.