Udostępnij za pośrednictwem


Punkty sekwencji języka C

Mię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 operatora logicznego AND (&&). Lewy operand operatora logicznego AND jest całkowicie oceniany, a wszystkie skutki uboczne zostaną ukończone przed kontynuowaniem. Jeśli lewy operand daje wartość false (0), inny operand nie jest obliczany.

  • Lewy operand operatora logicznego OR (||). Lewy operand operatora logicznego OR jest całkowicie oceniany, a wszystkie skutki uboczne zostaną ukończone przed kontynuowaniem. Jeśli lewy operand zwraca wartość true (nonzero), inny operand nie jest obliczany.

  • Lewy operand operatora przecinka. Lewy operand operatora przecinka jest całkowicie oceniany i wszystkie skutki uboczne są kompletne przed kontynuowaniem. Oba operandy operatora przecinka są obliczane zawsze. Należy pamiętać, że operator przecinka w wywołaniu funkcji nie gwarantuje kolejności oceny.

  • Operator wywołania funkcji. Wszystkie argumenty funkcji są oceniane i wszystkie skutki uboczne zostaną ukończone przed wejściem do funkcji. Nie określono kolejności oceny między argumentami.

  • Pierwszy operand operatora warunkowego. Pierwszy operand operatora warunkowego jest całkowicie oceniany i wszystkie skutki uboczne zostaną ukończone przed kontynuowaniem.

  • Koniec pełnego wyrażenia inicjalizacji (czyli wyrażenie, które nie jest częścią innego wyrażenia, takiego jak koniec inicjowania w instrukcji deklaracji).

  • Wyrażenie w instrukcji wyrażenia. Instrukcje wyrażeń składają się z wyrażenia opcjonalnego, po którym następuje średnik (;). Wyrażenie jest oceniane pod kątem skutków ubocznych i istnieje punkt sekwencji po tej ocenie.

  • Wyrażenie sterujące w instrukcji selection (if lub switch) . Wyrażenie jest obliczane całkowicie i wszystkie skutki uboczne są wykonywane przed wykonaniem kodu zależnego od zaznaczenia.

  • Wyrażenie sterujące instrukcji while or do . Wyrażenie jest obliczane całkowicie i wszystkie efekty uboczne zostaną wykonane przed wykonaniem jakichkolwiek instrukcji w następnej while iteracji lub do pętli.

  • Każde z trzech wyrażeń instrukcji for . Wyrażenia są obliczane całkowicie i wszystkie skutki uboczne zostaną wykonane przed wykonaniem jakichkolwiek instrukcji w następnej for iteracji pętli.

  • Wyrażenie w instrukcji return . Wyrażenie jest obliczane całkowicie, a wszystkie skutki uboczne są kompletne przed powrotem kontrolki do funkcji wywołującej.

Zobacz też

Obliczanie wyrażeń