0 Tage Serie
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
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 ## _ ## suffix
int 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'.