Was ist ein Sequenzpunkt?
Ein Sequenzpunkt in der Computerprogrammierung ist ein Moment, das während der Programmausführung auftritt, wenn der Wert einer Variablen vollständig berechnet wurde, ohne dass sich die Änderungen aus früheren Operationen anhängig machen und noch keine Berechnungen in einem zukünftigen Ausdruck durchgeführt wurden. Es gibt eine Reihe von Orten, an denen Sequenzpunkte vorhanden sind - hauptsächlich im C -Sprachstandard definiert - wie vor der Ausführung des Codes innerhalb einer Funktion, am Ende von Kontrollausdrücken in Aussagen wie "für" und "wenn" und am Ende eines vollständigen Ausdrucks, wie z. B. einer einfachen Zeile des C -Codes. Einige Gründe für die Definition eines Sequenzpunkts sind es, Situationen zu vermeiden, die mehrdeutig sind, zu undefiniertem Verhalten führen oder den Compiler verwirren und Code generieren können, der unvorhersehbar ist. In vielen Fällen sorgen sich Programmierer nicht ausdrücklich um einen Sequenzpunkt, obwohl das Konzept bei der Erstellung eines Compilers sehr wichtig ist, um sicherzustellen, dass der Code korrekt ausgeführt wird.NT in der C -Programmiersprache befindet sich in der Aussage A = A + B;. In diesem Ausdruck ist das Semikolon der Sequenzpunkt; Wenn der Ausdruck abgeschlossen ist, wird der Wert eines A bewertet und es werden keine verbleibenden Berechnungen durchgeführt, bis der nächste Ausdruck beginnt. Das gleiche Vorzeichen ist kein Sequenzpunkt, da der Wert von A vom Compiler in beliebiger Reihenfolge während des gesamten Ausdrucks geändert wird.
Die Hauptregel eines Sequenzpunkts ist, dass keine Variable mehr als einmal zwischen Punkten für einen anderen Zweck zugegriffen wird, als eine Änderung des Wertes zu berechnen. Ein Verstoß gegen diese Regel wird am besten ausgedrückt, wenn Sie einem Array einen Wert zuweisen. Wenn es eine Variable A und ein Array namens I gibt, dann ist es grammatikalisch in C, den Ausdruck I [a] = a ++ zu schreiben. Hier wird auf die Variable mehr als einmal für einen anderen Zweck als die Bewertung ihres aktuellen Wertes zugegriffen. nämlich wird es als verwendet alsN -Index in das Array I. Dies bedeutet, dass der Compiler A erhöhen kann, bevor er als Index oder nach seiner Verwendung verwendet wird, wodurch unvorhersehbares Verhalten erzeugt wird, auf das sich im Programm nicht verlassen kann.
Ein Sequenzpunkt kann im Grunde genommen als eine Möglichkeit angesehen werden, sicherzustellen, dass Anweisungen von einem Compiler konsistent bewertet und ausgeführt werden. Dies ermöglicht auch einem Compiler, Optimierungsstrategien anzuwenden, da das definierte Verhalten vorhersehbar ist. Innerhalb des C -Sprachstandards gibt es drei Hauptinstanzen von Sequenzpunkten, nämlich wenn eine Funktion mit der Ausführung, am Punkt der logischen Operatoren und Kommas und am Ende eines vollständigen Ausdrucks beginnt, und mit einem Semikolon endet, wie es die meisten C -Anweisungen tun.