Namensräume
Varianten
Aktionen

As-if-Regel

Von cppreference.com
< c‎ | Sprache

Erlaubt alle Code-Transformationen, die das beobachtbare Verhalten des Programms nicht ändern.

[bearbeiten] Erklärung

Der C-Compiler darf Änderungen am Programm vornehmen, solange Folgendes gilt:

1) An jedem Sequenzpunkt sind die Werte aller volatile-Objekte stabil (vorherige Auswertungen sind abgeschlossen, neue Auswertungen noch nicht begonnen).
(bis C11)
1) Zugriffe (Lesen und Schreiben) auf volatile-Objekte erfolgen strikt gemäß der Semantik der Ausdrücke, in denen sie auftreten. Insbesondere werden sie im selben Thread nicht mit anderen volatilen Zugriffen neu geordnet.
(seit C11)
2) Beim Programmabbruch sind die in Dateien geschriebenen Daten exakt so, als ob das Programm wie geschrieben ausgeführt worden wäre.
3) Textaufforderungen, die an interaktive Geräte gesendet werden, werden angezeigt, bevor das Programm auf Eingaben wartet.
4) Wenn das Pragma #pragma STDC FENV_ACCESS unterstützt und auf ON gesetzt ist, wird garantiert, dass die Änderungen an der Gleitkomma-Umgebung (Gleitkomma-Ausnahmen und Rundungsmodi) von den Gleitkomma-Arithmetikoperatoren und Funktionsaufrufen wie bei der Ausführung wie geschrieben beobachtet werden, mit Ausnahme von:
  • Das Ergebnis eines Gleitkomma-Ausdrucks, außer Cast und Zuweisung, kann die Reichweite und Präzision eines Gleitkomma-Typs haben, der sich vom Typ des Ausdrucks unterscheidet (siehe FLT_EVAL_METHOD).
  • Vorbehaltlich des Vorstehenden können Zwischenergebnisse von Gleitkomma-Ausdrücken berechnet werden, als ob sie unendliche Reichweite und Präzision hätten (es sei denn, #pragma STDC FP_CONTRACT ist OFF).
(seit C99)

[bearbeiten] Hinweise

[bearbeiten] Siehe auch

C++-Dokumentation für As-if-Regel