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)
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]
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).