C 序列點
在連續「序列點」之間,只能以運算式修改物件的值一次。 C 語言定義下列序列點:
邏輯 AND 運算子的左操作數 (&&& ) 。 繼續之前會完整評估邏輯 AND 運算子的左運算元,並且完成所有副作用。 如果左運算元判斷值為 false (0),便不會評估另一個運算元。
邏輯 OR 運算子 (
||
) 的左運算元。 繼續之前會完整評估邏輯 OR 運算子的左運算元,並且完成所有副作用。 如果左運算元判斷值為 true (非零),便不會評估另一個運算元。逗號運算子的左運算元。 繼續之前會完整評估逗號運算子的左運算元,並且完成所有副作用。 逗號運算子的兩個運算元會一律進行評估。 請注意,函式呼叫中的逗號運算子不保證評估順序。
函式呼叫運算子。 函式的所有引數均會評估,並且所有副作用會在輸入函式之前完成。 不會指定這些引數的評估順序。
條件運算子的第一個運算元。 繼續之前會完整評估條件運算子的第一運算元,並且完成所有副作用。
完整初始化運算式的結尾 (即不屬於另一個運算式的運算式,例如宣告陳述式中初始化的結尾)。
運算陳述式中的運算式。 運算式陳述式包含選擇性運算式且後面加上分號 (;)。 會評估運算式的副作用,而且在此項評估之後會有一個序列點。
選取範圍 (
if
或switch
) 語句中的控制表達式。 會完整評估運算式,並且其所有副作用會在執行與選取範圍相關的程式碼執行之前完成。或
do
語句的控制while
表達式。 表達式會完整評估,而且會在執行 或do
迴圈下一個反覆while
專案的任何語句之前完成所有副作用。語句的三個表達式中的每一個
for
。 表達式會完整評估,而且會在執行迴圈下一個反覆for
專案的任何語句之前完成所有副作用。return
陳述式中的運算式。 會完整評估運算式,並且所有副作用會在控制項回到呼叫函式之前完成。