Preprocessor substitution problem

18/08/2008 - 12:07 von Heinz Saathoff | Report spam
Moin,

ich hab bisher nur einfachste Dinge mit dem Pràprozessor gemacht, habe
jetz aber eine Anwendung, in der ich Namen per Pràprozessor generieren
möchte. Ein Beispiel sieht so aus:

#include <stdio.h>

#define NN(NAME,NUM) NAME ## NUM
#define XXX 1
#define YYY 2

int i1 = 10;
int i2 = 20;

int main()
{ printf("i1 = %d", NN(i,XXX)); /* NN(i,XXX) soll i1 sein */
printf("i2 = %d", NN(i,YYY)); /* NN(i,YYY) soll i2 sein */
return 0;
}

Der Compiler gibt als Fehler
{ printf("i1 = %d", NN(i,XXX));
^
a.c(11) : Error: undefined identifier 'iXXX'
printf("i2 = %d", NN(i,YYY));
^
a.c(12) : Error: undefined identifier 'iYYY'

Aus mir nicht verstàndlichen Gründen wird beim Makroaufruf NN der 2.
Parameter nicht expandiert, sondern literal eingesetzt.
Warum ist das so und wie könnte ich das hinkriegen, dass es
funktioniert?


- Heinz
 

Lesen sie die antworten

#1 Alexander Bartolich
18/08/2008 - 12:26 | Warnen spam
Heinz Saathoff schrieb:
[...]
Warum ist das so



It's a feature. Argumente von Macros werden bei der Ersetzung nur eine
Ebene tief ausgewertet. Willst du mehrere Ebenen auswerten brauchst du
geschachtelte Macros.

und wie könnte ich das hinkriegen, dass es funktioniert?



#define NN_EVAL(NAME,NUM) NAME ## NUM
#define NN(NAME,NUM) NN_EVAL(NAME,NUM)

usingwhitespaceisracism

Ähnliche fragen