Teste dein C/C++/.. Können

Gast #376796
Lesenswert?

Echt krass! Da wird einem ja Angst und Bange, da werden Fragen gestellt,
die man im echten Leben nie treffen sollte, wenn gefälligst die
unmöglichsten, aber leider technisch möglichen Konstrukte weggelassen
werden würden ;-) (c++)
Gast #376799
Lesenswert?

Apropos falsch: Kann mir jemand C++ Frage 11 erklären? Vielleicht habe
ich ja was verpasst, aber mein letztere Stand ist, dass Klammern kein
"sequence point" sind, folglich 2 Ergebnisse möglich sind.
#376801
Lesenswert?

> Kann mir jemand C++ Frage 11 erklären?

Wie war denn Frage 11?
Hab's grad nochmal probiert, aber da tauchen anscheinend
bei jedem Durchlauf andere Fragen auf.

Du hast aber auf jeden Fall Recht: Klammern sind
keine Sequence Points (sofern es sich nicht um
die Klammern um die Argumentliste eines Funktions-
aufrufes handelt).
Gast #376811
Lesenswert?

@Matthias: Nach dieser These wäre
   char *p;
   int a = *p++ - *p++;
definiert als äquivalent zu
   char *p;
   int a = *p - *p;
   p += 2;
Stimmt so aber nicht.

Der Spruch geht anders: "b++ erhöht b spätestens zum nächsten
sequence point um eins". Oder irgendwann vorher.
#376812
Lesenswert?

@Matthias

Das Verhalten ist undefiniert.
Du darfst eine Variable in einem Ausdruck nur entweder
  * immer lesen
  * oder nur einmal veraendern. In dem Fall muss die
    Veraenderung aber die einzige Aktion sein, die auf
    die Variable ausgefuehrt wird.

In C++ - speak lautet das so:

5 Expressions

5.4 Except where noted, the order of ...
    Between the previous and next sequence point a scalar object
    shall have its stored value modified at most once by the
    evaluation of an expression. Furthermore, the prior value
    shall be accessed only to determine the value to be stored.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren