Gast
#2698025
Hallo Könnte mir jemand erklären wie folgende Ausgabe zustande kommt? Ausgabe : 11 12 10 10 11 10 Besonders das 111210 kann ich mir nicht erklären
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
Ausgabe : 11 12 10 10 11 10 Gruß Heu
|
Anzeige
|
define Makro
Gast
#2698025
Hallo Könnte mir jemand erklären wie folgende Ausgabe zustande kommt? Ausgabe : 11 12 10 10 11 10 Besonders das 111210 kann ich mir nicht erklären
Ausgabe : 11 12 10 10 11 10 Gruß Heu Das ist doch sicher mal wieder 'ne Hausaufgabe oder ähnliches... Naja... Das define-macro wird vom Präprozessor textuell ersetzt, das andere ist eben eine Funktion - aus diesem Grund verhält sich das Inkrement anders. Wäre jetzt mal die erste fixe Vermutung. Heu schrieb: > Besonders das 111210 kann ich mir nicht erklären > Nimm deinen Code, mach die textuelle Ersetzung für das MAX Makro, setzt die Werte ein und führe die Anweisungen aus. Denn: Genau das gleiche machen auch Präprozessor, Compiler und letzten Endes das Programm, wenn es abläuft. Ja. Es ist wirklich so einfach. Du musst nur genau das tun, was auch der Prärpozessor tut: Einen Text durch einen anderen Text ersetzen, wobei du die jeweiligen A und B durch die bei der Verwendung angegebenen Sachen ersetzt. Und das wars dann auch schon. Zur besseren Analyse kannst du dann noch die überflüssigen Klammern weglassen. Und da liegt dann auch schon das 'Problem' in seiner vollen Pracht vor dir. Dominik S. schrieb: > eben eine Funktion - aus diesem Grund verhält sich das Inkrement anders. 'Das Inkrement' verhält sich auch nicht anders. Es inkrementiert. Mach die textuelle Ersetzung: Was kommt raus, wenn man in
das MAX Makro auflöst und das MAX anhand der Vorschrift
durch den zu ersetzenden Text ersetzt? aus i=MAX(x++, y++) wird dann .... Karl Heinz Buchegger schrieb: > Das 'Inkrement' verhält sich auch nicht anders. Es Inkrementiert. Man kann es mit dem "wörtlich nehmen" auch übertreiben. Dominik S. schrieb: > Karl Heinz Buchegger schrieb: >> Das 'Inkrement' verhält sich auch nicht anders. Es Inkrementiert. > > Man kann es mit dem "wörtlich nehmen" auch übertreiben. Ich wollt mich nicht lustig machen. Wenn das so rüber gekommen ist, entschuldige ich mich. Tatsächlich kann aber das Inkrement an sich ja nichts dafür. Es ist nicht an dem was rauskommt schuld. Wohl aber sind es 'die Inkremente' (Ich will es jetzt für den TO nicht zu einfach machen. Er soll die textuelle Ersetzung vornehmen. Nur so kann man mit dem Mythos "Makros statt Funktionen" aufräumen.)
Gast
#2698089
Hallo Mit der Textersetzung ergibt sich folgendes: int i, x=10, y=9; i=(x++)>(y++)?(x++:y++) Das heist also: Nach dem Vergleich wird inkrementiert so das x danach 11 und y 10 ist. Dann wird x dem i zugewiesen (i =11) und danach inkrementiert so das x dann 12 ist (x=12) . Mit y passiert nichts weiteres (y=10) Stimmt das so? Gruß Heu
Gast
#2698105
Das sieht so korrekt aus. Lernen solltest Du daraus: * Makros sind in C++ fast immer Teufelswerk. C++ hat inline-Funktionen oder noch besser function templates, max() und min() werden sogar kostenlos mitgeliefert. * Wenn ein durchschnittlich mittelmäßiger Programmierer länger als 2s über Pre-/Post-Increment und sequence points nachdenken muss, ist die Zeile zu kompliziert und man sollte vielleicht ein paar Zeilen mehr spendieren. Der Compiler wird es sowieso optimieren. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|