Sequenz-Punkte

Dieser Teil von ManderC ist noch in Bearbeitung

Wenn in einem Ausdruck ein Operand gleichzeitig gelesen und geschrieben wird, können Nebeneffekte auftreten, welche das Ergebnis einer Operation verändern, je nachdem, wie der Ausdruck geschrieben und mit welchem Compiler er übersetzt wird. Durch die Festlegung von sogenannten Sequenz-Punkten wird in den Sprachen C und C++ ein Ausdruck in unabhängige Teile aufgetrennt, welche sequentiell hintereinander abgearbeitet werden können. Das Auftreten von unerwünschten Nebeneffekten wird dadurch stark vermindert, jedoch nicht gänzlich vermieden.

Details

Zwar ist in den Sprachen C und C++ durch die Abarbeitungsrichtung und Rangfolge von Operatoren genau spezifiziert, wann welcher Operator abgearbeitet werden soll. Es ist jedoch nicht eineindeutig festgelegt, wann die Operanden der jeweiligen Operationen angesprochen werden sollen. Wenn eine Variable in einem Ausdruck gleichzeitig gelesen wie auch geschrieben wird, ist somit nicht klar, ob ein Lese-Vorgang nun vor oder nach einem Schreib-Vorgang passieren soll. Auch ist nicht klar, was passiert, wenn mehrere Schreib-Vorgänge auf denselben Operanden auftreten. Beispielsweise ist es im folgenden Code nicht möglich, den schlussendlichen Wert von x vorauszusagen:

#include <stdio.h> int main(){ int x = 10; x = x++; printf("%d\n", x); return 0; }

10? 11?

In diesem Beispiel ist es nicht klar, ob die Zuweisung vor oder nach Ausführung des Inkrements geschehen soll. Entweder wird zuerst das Inkrement ausgeführt und danach der ursprüngliche Wert (was dem Rückgabewert der Operation x++ entspricht) wieder zugewiesen, oder aber der ursprüngliche Wert wird zuerst zugewiesen und danach die Variable inkrementiert.

sequenz-operator restrict