Skip to main content

Vad är en sekvenspunkt?

En sekvenspunkt i datorprogrammering är ett ögonblick som inträffar under programutförandet när värdet på en variabel har beräknats helt, utan några förändringar som väntar på tidigare operationer och inga beräkningar i ett framtida uttryck som utförs ännu.Det finns ett antal platser där sekvenspunkter finns mdash;Primärt definieras i C -språkstandarden mdash;såsom före exekveringen av koden i en funktion, i slutet av kontrolluttryck i uttalanden som för och om, och i slutet av något fullständigt uttryck, till exempel en enkel rad C -kod.Några skäl för att definiera en sekvenspunkt är att undvika situationer som är tvetydiga, resulterar i odefinierat beteende eller kan förvirra kompilatorn och generera kod som är oförutsägbar.I många fall oroar sig programmerare inte uttryckligen för en sekvenspunkt, även om konceptet i skapandet av en kompilator är mycket viktigt för att säkerställa att koden körs korrekt.

Ett exempel på en sekvenspunkt i C -programmeringsspråket är iUttalandet A ' A + B;.I detta uttryck är semikolon sekvenspunkten;När uttrycket är avslutat kommer värdet på en att utvärderas och inga kvarvarande beräkningar kommer att utföras på det tills nästa uttryck börjar.Det lika tecknet är inte en sekvenspunkt, eftersom värdet på en kan modifieras av kompilatorn i någon ordning under hela uttrycket.

Huvudregeln för en sekvenspunkt är att ingen variabel kommer att nås mer än en gång mellan poäng för någonSyfte annat än att beräkna en förändring i dess värde.En överträdelse av denna regel uttrycks bäst när man tilldelar ett värde till en matris.Om det finns en variabel A och en array som kallas I, är det grammatiskt i c möjligt att skriva uttrycket i [a] ' a ++.Här nås variabeln mer än en gång för ett annat syfte än att utvärdera dess nuvarande värde;nämligen används det som ett index i matrisen I. Detta betyder att kompilatorn kan öka A innan den används som ett index eller efter att det används, vilket skapar oförutsägbart beteende som inte kan lita på i programmet.

En sekvenspunktI princip kan ses som ett sätt att säkerställa att uttalanden kan utvärderas och genomförs konsekvent av en kompilator.Detta gör det också möjligt för en kompilator att använda optimeringsstrategier, eftersom det definierade beteendet är förutsägbart.Inom C -språkstandarden finns det tre huvudsakliga instanser av sekvenspunkter, nämligen när en funktion börjar körning, vid logiska operatörer och kommatecken, och i slutet av ett fullständigt uttryck som slutar med en semikolon, som de flesta C -uttalanden gör.