Zeilen expansion

Hallo, habe wieder mal eine neue Frage.

Geben Sie an, welche Zeile (Zeilen) des folgenden Programms durch den Präprozessor expandiert wird (werden) und zu welchem Ergebnis die Expansion führt.

#include
#define MINUS_A_PLUS_B(a) -(a)+b
int main(void)
{
int a=4, b=7, c, d=10;
c = MINUS_A_PLUS_B(d);
printf( „C=: %d \n“, c );
/* C=: _____________________________ */
return 0;
}

Wie ist es jetzt gemeint?
Ich habe in meinem Buch nachgelesen und die zweite Zeile schaut so aus, als ob die expandieren wird .
(warum? weis ich nicht)

Kann mir das bitte jemand erklären?
Wann expondieren die Zeilen und warum? (gibt’s da besondere Merkmale)

Danke,
Alexander

Hallo Alexander!

Ich habe mir mal so Deine letzten paar Postings angesehen und das Gefühl bekommen, daß Du Dir hier Deine Hausaufgaben (bzw. Übungen für die Uni?) lösen läßt. Das macht wenig Sinn, wenn Du die zugrundelegende Theorie nicht verstehst, und hier geht es fast ausschließlich um sehr grundlegende Dinge, wenn man C programmieren lernen will / soll. Nachdem ich Dich jetzt ausreichend geschulmeistert habe noch zu Deiner eigentlichen Frage:
Die Aufgabenstellung bezieht sich auf (wie Du richtig erkannt hast) die zweite Zeile

#define MINUS\_A\_PLUS\_B(a) -(a)+b

und die Zeile

c = MINUS\_A\_PLUS\_B(d);

Das Geheimnis ist, daß der Übersetzungsvorgang für ein C-Programm in mehrere Schritte einteilt, die grob Vorkompilieren (precompile), kompilieren und linken sind. Im ersten Schritt findet unter anderem eine reine Textersetzung statt, die an allen Stellen im Quellcode Textkonstanten (das was direkt hinter #define steht) deren „Langversion“ (das was hinter der Konstanten steht) einfügt. Weil das im Allgemeinen länger als der Name der Konstanten ist, nennt man das auch expandieren.
Für genauere Informationen, im speziellen bezüglich Parameterübergabe an solche Makros und unerwünschte Seiteneffekte solltest Du Dich noch mal mit Deinem Buchmaterial auseinandersetzen, insbesondere, weil solche Makros ebenso beliebt wie fehleranfällig sind.

Gruß,
TheBeast

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

Erst mal, vielen Dank für deine Antwort!

Ich kann dir garantieren, dass es sind keine Hausaufgaben sind.

Da ich demnächst eine Info. Prüfung schreiben muss, habe ich mir ein paar ehemaligen Prüfungen besorgt und die Aufgaben was ich hier reingepostet habe sind ein Teil davon.

Es sind Aufgaben, die ich entweder nicht verstehe oder bei dennen ich mir nicht sicher bin. (und für die ich keine für mich verständliche Erklärung in den Büchern finde).

MfG,
Alexander

Die Zeile
c = MINUS_A_PLUS_B(d);
wird durch die Makrodefinition in Zeile 2 zu:
c = -(d)+b;

Die Zeile
#include
wird durch den Inhalt der stdio.h Datei ersetzt. Ob man dies auch Expansion nennt ist mir nicht bekannt.

Grüße
Bruno

Vielen Dank für deine Antwort!!!

MfG,
Alexander

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]