As-if rule
From cppreference.net
Erlaubt jegliche und alle Code-Transformationen, die das beobachtbare Verhalten des Programms nicht ändern.
Erklärung
Dem C-Compiler ist es erlaubt, beliebige Änderungen am Programm vorzunehmen, solange Folgendes wahr bleibt:
|
1)
An jedem
Sequenzpunkt
sind die Werte aller
volatile
-Objekte stabil (vorherige Auswertungen sind abgeschlossen, neue Auswertungen noch nicht begonnen).
|
(bis C11) |
|
1)
Zugriffe (Lese- und Schreiboperationen) auf
volatile
-Objekte erfolgen strikt gemäß der Semantik der Ausdrücke, in denen sie vorkommen. Insbesondere werden sie
nicht neu angeordnet
in Bezug auf andere volatile-Zugriffe im selben Thread.
|
(seit C11) |
2)
Beim Programmende entsprechen die in Dateien geschriebenen Daten exakt denen, die bei Ausführung des Programms gemäß seinem geschriebenen Code entstanden wären.
3)
Aufforderungstext, der an interaktive Geräte gesendet wird, wird angezeigt, bevor das Programm auf Eingaben wartet.
|
4)
Wenn das Pragma
#pragma STDC FENV_ACCESS
unterstützt wird und auf
ON
gesetzt ist, werden die Änderungen an der
Gleitkommaumgebung
(Gleitkomma-Ausnahmen und Rundungsmodi) garantiert von den Gleitkomma-Operatoren und Funktionsaufrufen beachtet, als ob sie wie geschrieben ausgeführt würden, außer dass
|
(seit C99) |
Hinweise
|
Dieser Abschnitt ist unvollständig
Grund: analog ausfüllen zu cpp/language/as_if |
Siehe auch
|
C++ Dokumentation
für
as-if rule
|