Точки следования C
Между последовательными «точками последовательности» значение объекта может быть изменено только один раз с помощью выражения. В языке C определены следующие точки последовательности.
Левый операнд логического оператора AND (&>). Перед продолжением левый операнд оператора логического AND полностью вычисляется и учитываются все побочные эффекты. Если левый операнд имеет значение False (0), значение второго операнда не вычисляется.
Левый операнд оператора логического OR (
||
). Перед продолжением левый операнд оператора логического OR полностью вычисляется и учитываются все побочные эффекты. Если левый операнд имеет значение True (не равен нулю), значение второго операнда не вычисляется.Левый операнд оператора запятой. Перед продолжением левый операнд оператора запятой полностью вычисляется и учитываются все побочные эффекты. Оба операнда оператора запятой вычисляются всегда. Обратите внимание, что оператор запятой в вызове функции не гарантирует порядок вычислений.
Оператор вызова функции. Перед переходом в функцию все ее аргументы полностью вычисляются и учитываются все побочные эффекты. Порядок вычисления для аргументов не определен.
Первый операнд условного оператора. Перед продолжением первый операнд условного оператора полностью вычисляется и учитываются все побочные эффекты.
Конец выражения полной инициализации (т. е. выражения, которое не является частью другого выражения, например конец инициализации в операторе объявления).
Выражение в операторе выражения. Операторы-выражения состоят из необязательного выражения с последующей точкой с запятой (;). Выражение вычисляется для учета его побочных эффектов, и после вычисления следует точка последовательности.
Управляющее выражение в операторе выбора (
if
илиswitch
). Перед выполнением кода, зависящего от сделанного выбора, это выражение полностью вычисляется и учитываются все побочные эффекты.Управляющее выражение оператора
while
илиdo
. Перед выполнением любых операторов в следующей итерации циклаwhile
илиdo
это выражение полностью вычисляется и вступают в силу все побочные эффекты.Каждое из трех выражений оператора
for
. Перед выполнением любых операторов в следующей итерации циклаfor
эти выражения полностью вычисляется и вступают в силу все побочные эффекты.Выражение в операторе
return
. Перед возвратом управления в вызывающую функцию это выражение полностью вычисляется и учитываются все побочные эффекты.