c / intermediate
Snippet
Stringifizierung und Verkettung in Makros
Der '#'-Operator wandelt ein Makro-Argument in ein String-Literal um (Stringifizierung). Der '##'-Operator verbindet zwei Token während des Preprocessings (Verkettung), was die dynamische Erzeugung von Variablennamen oder Codeblöcken ermöglicht.
snippet.c
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>#define DEBUG_PRINT(var) printf(#var " = %d\n", var)#define MAKE_NAME(prefix, suffix) prefix ## _ ## suffixint main() {int my_val = 42;DEBUG_PRINT(my_val);int MAKE_NAME(user, id) = 101;printf("user_id = %d\n", user_id);return 0;}
Erklärung
1
#var
Wandelt den Namen der an das Makro übergebenen Variable in ein String-Literal um.
2
prefix ## _ ## suffix
Klebt Token zusammen; zum Beispiel werden 'user' und 'id' zum Bezeichner 'user_id'.