Punkty sekwencji języka C
Pomiędzy kolejnymi "punktami sekwencji" wartość obiektu może być modyfikowana tylko raz przez wyrażenie.Język C definiuje następujące punkty sekwencji:
Lewy operand logicznego operatora AND (&&).Lewy operand logicznego operatora AND jest obliczany całkowicie, wraz ze wszystkimi efektami ubocznymi zakończonymi przed kontynuacją.Jeśli lewy operand ma wartość false (0), inny argument nie jest obliczany.
Lewy operand logicznego operatora OR (||).Lewy operand logicznego operatora OR jest obliczany całkowicie, wraz ze wszystkimi efektami ubocznymi zakończonymi przed kontynuacją.Jeśli lewy operand ma wartość true (niezerową), inny argument nie jest obliczany.
Lewy operand operatora przecinka.Lewy operand operatora przecinka jest obliczany całkowicie, wraz ze wszystkimi efektami ubocznymi zakończonymi przed kontynuacją.Oba operandy operatora przecinka są obliczane zawsze.Należy zauważyć, że operator przecinka w wywołaniu funkcji nie gwarantuje kolejności oceny.
Operator wywołania funkcji.Wszystkie argumenty funkcji są obliczane wraz ze wszystkimi efektami ubocznymi zakończonymi przed wejściem do funkcji.Kolejność oceny argumentów nie jest określona.
Pierwszy operand operatora warunkowego.Pierwszy operand operatora warunkowego jest obliczany całkowicie, wraz ze wszystkimi efektami ubocznymi zakończonymi przed kontynuacją.
Koniec pełnego wyrażenia inicjalizacji (to znaczy wyrażenia, które nie jest częścią innego wyrażenia, takiego jak koniec inicjalizacji w instrukcji deklaracji).
Wyrażenie w instrukcji wyrażenia.Instrukcje wyrażeń składają się z opcjonalnego wyrażenia z następującym po nim średnikiem (;).Wyrażenie jest obliczane dla jego skutków ubocznych i w wyniku tych obliczeń istnieje punkt sekwencji.
Wyrażenie kontrolujące w instrukcji wyboru (if lub switch).Wyrażenie jest obliczane całkowicie, wraz ze wszystkimi efektami ubocznymi zakończonymi przed wykonaniem kod zależnego od wyboru.
Wyrażenie kontrolujące instrukcje while lub do.Wyrażenie jest obliczane całkowicie, wraz ze wszystkimi efektami ubocznymi zakończonymi przed wykonaniem następnej iteracji pętli while lub do.
Każde z trzech wyrażeń instrukcji for.Wyrażenie jest obliczane całkowicie, wraz ze wszystkimi efektami ubocznymi zakończonymi przed wykonaniem następnej iteracji pętli for.
Wyrażenie w instrukcji return.Wyrażenie jest obliczane całkowicie, wraz ze wszystkimi efektami ubocznymi zakończonymi przed zwróceniem sterowania do funkcji wywołującej.