Zum Inhalt springen

Frage zu diesem C-Code


data-bear

Empfohlene Beiträge

Damit wollen die doch nur alle blöd im Kopf machen und sich selber hinstellen als ob sie die Meister wären, obwohl sowas kein normaler Mensch im echten Leben braucht. Und wenn man dann den Lehrer frägt, wo der Unterschied zwischen NOT und EOR -1 ist, dann raufen die sich die Haare und rechnen stundenlang an der Tafel mit Wahrheitstabellen rum bis sie kapitulieren (so war´s jedenfalls mal bei mir, weil ich surfen wollte und der Lehrer auch dabei seinen Spaß hatte). Nach der Ausbildung kratzt man sich dann am Kopf und überlegt, warum man denn nix gelernt hat!

Link zu diesem Kommentar
Auf anderen Seiten teilen

... was eure Antworten angeht, denn:

Auszug aus C-FAQ:

Frage 4.2: Bei meinem Compiler liefert

int i = 7;

printf("%d\n", i++ * i++);

49. Sollte das Ergebnis nicht 56 lauten, egal in welcher Reihenfolge die Terme ausgewertet werden?

Antwort: Die Postinkrement und -dekrement Operatoren ++ und -- führen ihren Seiteneffekt erst aus, nachdem sie den vorherigen Wert ausgegeben haben. Das "nachdem" in dieser Aussage wird dabei aber oft mißverstanden: Der Seiteneffekt muß sich nicht sofort auswirken, nachdem der ursprüngliche Wert der Variablen ausgegeben wurde; er kann sich erst auswirken, nachdem andere Teilausdrücke bearbeitet wurden. Das einzige, auf das man sich verlassen kann, ist, daß alle Seiteneffekte berücksichtigt wurden, nachdem der Ausdruck "vollständig" berechnet wurde (vor dem nächsten "sequence point" in ANSI C Terminologie). Im obigen Beispiel kann der Compiler zuerst die beiden ursprünglichen Werte miteinander multiplizieren und danach alle Seiteneffekte berücksichtigen.

***************************

Der springende Punkt scheint der zu sein, das alle Seiteneffekte _sicher_ berücksichtig sind, nachdem der _gesamte_ Ausdruck berechnet wurde...

Danach könnte dann auch 36 herauskommen, wenn das Inkrement/Dekrement erst nach dem gesamten Ausdruck ausgeführt/berücksichtigt werden werden.

Tschau, Stefan.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Bei M$ werden nur die Variablen verwendet und das ++ wohl erst nach der Multiplikation rangehängt. Da das Ergebnis eh undefiniert ist, haben die sich wohl dafür entschieden. Das wird wohl jeder Compiler anders machen, vor allem wenn noch diverse Optimierungen mitspielen. Egal was ich mache bekomme ich immer 49. Die wollen damit den Leuten wohl klarmachen, daß der ++ nur zum Inkrementieren einer Variable oder eines Zeigers verwendet werden soll, ohne sich auf Terme auszuwirken in denen es verwendet wird.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...