Peter schrieb:
> der Präprozessor macht doch erst "Textersetzung" bei
>
>
Das #ifdef ist uninteressant, wenn es um Textersetzungen geht. Schon
alleine das #define sorgt für eine Textersetzung.
Das #ifdef kann jetzt höchstens dafür sorgen, dass bestimmter Code
überhaupt wegfällt, bzw. Makros auf eine von mehreren Alternativen
festgelegt werden.
> und das sind extrem große Konstrukte zB:
Was ist da bitte 'extrem gross' daran.
Nimm deinen verwendenden Code. Der sieht vielleicht so aus
int main()
{
int j;
INIT;
}
und jetzt ersetzt du eben INIT durch den Makroinhalt
int main()
{
int j;
{
unsigned int i;
struktur.Version = 0;
struktur.EvtNumber = COUNT; \ //COUNT ist wieder ein #define
struktur.Control = 0;
for (i=0;i<COUNT;i++) {
struktur.Event[i].Ctr = 0;
}
}
}
COUNT ist seinerseits wieder ein Makro. Vielleicht
#define COUNT 15
also machst du den nächsten Durchgang und ersetzt COUNT durch 15
int main()
{
int j;
{
unsigned int i;
struktur.Version = 0;
struktur.EvtNumber = 15;
struktur.Control = 0;
for (i=0;i<15;i++) {
struktur.Event[i].Ctr = 0;
}
}
}
und so gehts weiter und weiter, indem du eine Makro-Ebene nach der
anderen durch den Text ersetzt, für den das Makro steht. Solange, bis du
das Gefühl hast, jetzt ist es besser aufzuhören, wie zb bei dem
angenommenen COUNT Makro. Das in diesem Beispiel zu ersetzen ist
meistens nicht mehr sinnvoll. Denn 15 'erzählt' dir beim Lesen weniger
als COUNT.
Ich sagte doch: mit viel Geduld und Spucke. Und so hab ich das auch
gemeint.