[C] Variadic Macro und "Concatenation"

beuteltier

Grünschnabel
Hallo, ich versuche gerade ein Makro zu definieren dass an ein vorher definiertes Präfix ein Suffix anhängt. Leider wird in keinem der folgenden Beispiele PREFIX ausgewertet:
C:
#define PREFIX my
#define SYMBOL(suffix) PREFIX ## _ ## suffix
C:
#define PREFIX my
#define SYMBOL(prefix, suffix) prefix  ## _ ## suffix
Das Ergebnis ist immer das gleiche:
Code:
SYMBOL(test) => PREFIX_test
Code:
SUFFIX(PREFIX, test) => PREFIX_test
Was mache ich falsch?
 
Zuletzt bearbeitet:
Hi.

Das Problem dabei ist, das bei der Token Konkatenation vorher keine Ersetzung bei den Parametern des Makros selbst durchgeführt wird:
C:
#define P 5
#define FOO(x)  x + 5

FOO(P)
=> 5 + 5

#define FOO1(x)  x ## 5

FOO1(P)
=> P5
Man muss das dann mehrstufig aufrufen, damit zuerst die vorhandenen Makros expandiert werden:
C:
#define P 5
#define FOO_(x)  x  ## 5
#define FOO(x)  FOO_(x)

FOO(P)
=> 55
Gruß
 
Zuletzt bearbeitet:
Danke für die schnelle Antwort! Hat mir sehr geholfen:
C:
#include <stdio.h>

#define PREFIX  my
#define HELPER(a, b, c) a ## b ## c
#define SYMBOL(prefix, suffix) HELPER(prefix, _, suffix)

int main(void)
{
    const char *my_test = "TEST!";
    puts(SYMBOL(PREFIX, test));
    return 0;
}
Schade dass es mit einem Parameter nicht klappt. Oder geht das auch?

[EDIT] Geht: :)
C:
#include <stdio.h>

#define PREFIX  my

#define HELPER1(a, b) a ## _ ## b
#define HELPER2(a, b) HELPER1(a, b)
#define SYMBOL(suffix) HELPER2(PREFIX, suffix)

int main(void)
{
    const char *my_test = "TEST!";
    puts(SYMBOL(test));
    return 0;
}
 
Zuletzt bearbeitet:
Zurück