Heim  >  Artikel  >  Backend-Entwicklung  >  Ist „i = i 1“ in C 17 gesetzlich definiert?

Ist „i = i 1“ in C 17 gesetzlich definiert?

Linda Hamilton
Linda HamiltonOriginal
2024-10-29 03:02:02570Durchsuche

 Is `i = i     1`  Legally Defined in C  17?

Legalität von i = i 1 in C 17

C 17 führte eine subtile, aber bedeutende Änderung ein, die den Ausdruck i = i 1 legalisierte; , was zuvor in C 11 ein undefiniertes Verhalten war.

Vor C 17

In C 11 wurde die Auswertungsreihenfolge eines Zuweisungsausdrucks wie folgt angegeben:

  • Wertberechnungen der rechten und linken Operanden werden vor der eigentlichen Zuweisung sequenziert.
  • Es gab jedoch keine spezifische Reihenfolgeanforderung zwischen der Zuweisung selbst und möglichen Nebenwirkungen auf der rechten Seite ( RHS)-Ausdruck.

Im Fall von i = i 1; bedeutete dies, dass der Nebeneffekt der Inkrementierung von i mithilfe des Postfix-Operators vor oder nach der Zuweisung auftreten konnte. Dieser Mangel an Sequenzierung führte zu undefiniertem Verhalten.

Änderungen in C 17

C 17 führte einen zusätzlichen Satz zur Spezifikation des Zuweisungsoperators ein: „Der rechte Operand ist vor dem linken Operanden sequenziert. Dieser scheinbar harmlose Zusatz hat weitreichende Auswirkungen.

Durch die Sequenzierung des RHS vor dem LHS stellt C 17 nun sicher, dass etwaige Nebenwirkungen im RHS garantiert vor der eigentlichen Zuordnung auftreten. Dadurch wird die Zuweisungsaktion effektiv von jeglichem potenziell undefinierten Verhalten isoliert.

Das Beispiel neu schreiben

Um diese Änderung zu veranschaulichen, lassen Sie uns die Auswertung von i = i 1; in C 17:

  1. Wertberechnung des rechten Operanden (RHS): i 1

    • Inkrementiere i mit Postfix (Nebeneffekt).
    • Fügen Sie 1 zum erhöhten Wert hinzu.
  2. Reihenfolge von RHS vor LHS:

    • Alle Nebenwirkungen im RHS (einschließlich der Erhöhung) treten auf .
  3. Wertberechnung des linken Operanden (LHS): i

    • Der aktuelle Wert von i wird verwendet.
  4. Zuweisung:

    • Ordnen Sie das Ergebnis der RHS der LHS zu.

Indem Sie sicherstellen, dass alle Nebenwirkungen berücksichtigt sind Wenn die RHS der Zuweisung vorangeht, schließt C 17 die Möglichkeit eines undefinierten Verhaltens in solchen Ausdrücken endgültig aus.

Das obige ist der detaillierte Inhalt vonIst „i = i 1“ in C 17 gesetzlich definiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn