Hva er et sekvenspunkt?
Et sekvenspunkt i datamaskinprogrammering er et øyeblikk som oppstår under programutførelse når verdien til en variabel er blitt fullstendig beregnet, uten at noen endringer er ventet fra tidligere operasjoner og ingen beregninger i et fremtidig uttrykk er utført ennå. Det er en rekke steder der sekvenspoeng eksisterer - primært definert i C-språkstandarden - for eksempel før utførelsen av koden i en funksjon, på slutten av kontrolluttrykk i utsagn som "for" og "hvis", og på slutten av et fullstendig uttrykk, for eksempel en enkel linje med C-kode. Noen grunner til å definere et sekvenspunkt er å unngå tvetydige situasjoner, resultere i udefinert oppførsel eller kan forvirre kompilatoren og generere kode som er uforutsigbar. I mange tilfeller bekymrer ikke programmerere eksplisitt over et sekvenspunkt, selv om konseptet i opprettelsen av en kompilator er veldig viktig for å sikre at kode blir utført korrekt.
Et eksempel på et sekvenspunkt i programmeringsspråket C er i setningen A = A + B ;. I dette uttrykket er semikolonet sekvenspunktet; når uttrykket er fullført, blir verdien av A evaluert og ingen resterende beregninger blir utført på det før neste uttrykk begynner. Likestegnet er ikke et sekvenspunkt, fordi verdien til A kan endres av kompilatoren i hvilken som helst rekkefølge gjennom hele uttrykket.
Hovedregelen for et sekvenspunkt er at ingen variabel får tilgang til mer enn en gang mellom punkter for noe annet formål enn å beregne en endring i verdien. Et brudd på denne regelen kommer best til uttrykk når du tildeler en verdi til en matrise. Hvis det er en variabel A og en matrise som heter I, så grammatisk i C er det mulig å skrive uttrykket I [A] = A ++. Her åpnes variabelen mer enn en gang for et annet formål enn å evaluere dens nåværende verdi; nemlig at den brukes som en indeks i matrisen I. Dette betyr at kompilatoren kan øke A før den brukes som en indeks eller etter at den er brukt, og skaper uforutsigbar oppførsel som ikke kan stole på i programmet.
Et sekvenspunkt kan i utgangspunktet sees på som en måte å sikre at utsagn kan og vil bli evaluert og gjennomført av en kompilator. Dette gjør det også mulig for en kompilator å benytte optimaliseringsstrategier, fordi den definerte oppførselen er forutsigbar. Innenfor C-språkstandarden er det tre hovedtilfeller av sekvenspunkter, nemlig når en funksjon begynner utførelse, på punktet for logiske operatører og komma, og på slutten av et fullstendig uttrykk som ender med en semikolon, slik de fleste C-uttalelser gjør .