c / expert
Snippet
Diskriminierte Tagged-Union-Ausdrücke mit Musterabgleich-Dispatch
Zeigt typsichere Varianten-Typen (Tagged Unions / Summentypen) in Standard-C. Ein Enum-Diskriminator sichert den Zugriff auf das aktive Union-Feld während der rekursiven Steuerung durch abstrakte Syntaxbaum-Knoten.
snippet.c
c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>typedef enum { NODE_INT, NODE_ADD } NodeType;struct Node;typedef struct {struct Node* left;struct Node* right;} BinaryOp;typedef struct Node {NodeType type;union {int value;BinaryOp op;} as;} Node;int eval_node(const Node* node) {switch (node->type) {case NODE_INT:return node->as.value;case NODE_ADD:return eval_node(node->as.op.left) + eval_node(node->as.op.right);}return 0;}
Erklärung
1
typedef enum { NODE_INT, NODE_ADD } NodeType;
Defines explizite Varianten-Typ-Tags zur Identifikation des jeweils gültigen Union-Feldes.
2
union { int value; BinaryOp op; } as;
Deklariert überlappenden Speicherbereich zur Speicherung von sich gegenseitig ausschließenden Datenstämmen.
3
switch (node->type)
Führt einen dynamischen Musterabgleich-Dispatch auf Basis des strukturellen Diskriminator-Tags aus.