Logelei (j++)
-
int a=1;
int b=2;
int c=a + ++ b;welchen Wert haben a und b?
Kleiner Tipp:
mit prioritäten hat das nix zu tun...
-
@Shade
Um deine Frage zu beantworten es kommt auf die genaue schreibweise an!
c=a+++b; ->
a=2 b=2 c=3,
denn a++ bedeutet das a erst nach der restlichen Operation Incrementiert wird. Es wird also gerechnet c=a+b; a++;c=a+ ++b;
a=1 b=3 c=4,
denn es wird gerechnet b+1; und dann (a+b) und wenn das nichts mit prioritäten zu tun hat hmmmm`?Prioritäten:
In diesem Punkt möchte ich mich gerne Streiten mit dir denn der Compiler wertet diese Zeichenfolge für sich aus.
Hierauf folgt, das +++ ein dreifaches Plus erst als Increment und dann als mathematische Plusoperation gelesen wird. Da das Increment aber als Post(Operation) angefügt ist wird diese erst nach der eigentlichen Berechnung also a + b ausgeführt und hat somit keinen Einfluss auf das Ergebnis von c.
[ Dieser Beitrag wurde am 16.05.2003 um 14:21 Uhr von DaDaywalker editiert. ]
-
Sckøøl Danke und zustimm Schøøl
-
Original erstellt von DaDaywalker:
Um deine Frage zu beantworten es kommt auf die genaue schreibweise an!exakt!
-
Kleine Denkaufgabe (aber auch nicht so wild):
Was würde mit den Initialisierungen von "a=1;" und "b=2;" bei c=a----b herauskommen?
-
[ Dieser Beitrag wurde am 16.05.2003 um 21:56 Uhr von volkard editiert. ]
-
Original erstellt von RTC:
Kleine Denkaufgabe (aber auch nicht so wild):
Was würde mit den Initialisierungen von "a=1;" und "b=2;" bei c=a----b herauskommen?einen syntaxfehler.
naja der kompiler macht das ganze zu:
c=(a--)-- b;
weil posdektrement den höchsten rang hat.
und dann ist:
1. a-- keine lvalue d.h. der zweite -- ist illegal
2. steht das b einfach in der landschaft und es fehlt ein operator davor.[ Dieser Beitrag wurde am 16.05.2003 um 22:14 Uhr von japro editiert. ]
-
Original erstellt von japro:
**
naja der kompiler macht das ganze zu:
c=(a--)-- b;
**Hast natürlich recht. Eigentlich wollte ich schreiben:
c=a--- -b;
was ja dann geht! c= a-- - --b; ist auch ganz nett...
-
Original erstellt von japro:
[quote]Original erstellt von RTC:
[qb]Kleine Denkaufgabe (aber auch nicht so wild):
Was würde mit den Initialisierungen von "a=1;" und "b=2;" bei c=a----b herauskommen?einen syntaxfehler.
naja der kompiler macht das ganze zu:
c=(a--)-- b;
weil posdektrement den höchsten rang hat.[/QB][/QUOTE]Richtiges Ergebnis, falsche Begründung. Zu dem Zeitpunkt, wo der Quelltext in Präprozessor-Tokens übersetzt wird, hat die Rangfolge der Operatoren noch keinerlei Bedeutung. Der Standard sagt einfach aus:
"If the input stream has been parsed into preprocessing tokens up to a given character, the next preprocessing token is the longest sequence of characters that could constitute a preprocessing token." (ISO/IEC 9899:1999, 6.4-3)
Diese werden dann 1-zu-1 in Token umgewandelt:
"Each preprocessing token is converted into a token. The resulting tokens are syntactically and semantically analyzed and translated as a translation unit." (ISO/IEC 9899:1999, 5.1.1.2-7)
Der Übersetzer erstellt also folgende Tokenfolge:
c = a -- -- b
was ein Syntaxfehler ist.
-
also mein kompiler (gcc) hat gefunden es fehle ihm ein lvalue
-
@japro: bei "c=a--- -b;" ??? Also bei mir und mit dem gcc hat's geklappt
-
Original erstellt von RTC:
@japro: bei "c=a--- -b;" ??? Also bei mir und mit dem gcc hat's geklapptich hab mich auch auf c=a----b bezogen ohne abstand