As-if-Regel
Von cppreference.com
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:
|
(seit C99) |
[bearbeiten] Hinweise
| Dieser Abschnitt ist unvollständig Grund: Ähnlich wie bei cpp/language/as_if ausfüllen |
[bearbeiten] Siehe auch
| C++-Dokumentation für As-if-Regel
|