共用方式為


副作用

運算式的評估順序由定義特定的實作中,除了當語言可以保證的評估以特定順序 (中所述的優先順序和順序的評估)。 比方說,副作用就會發生下列的函式呼叫中:

add( i + 1, i = j + 2 );
myproc( getc(), getc() );

函式呼叫的引數可以是任何順序進行評估。 運算式i + 1可能會先驗算i = j + 2,或i = j + 2可能會先驗算i + 1。 結果是相同的。 同樣地,不能保證什麼字元實際傳遞至myproc。 一元 (unary) 遞增和遞減後作業牽涉到的工作分派,這類作業可能會造成副作用,,如下列範例所示:

x[i] = i++;

在這個範例中,值x也就是修改將會無法預測。 註標的值可能是新的或舊值i。 在不同的編譯器或不同的最佳化層級] 下,結果可能會有所不同。

因為 c 沒有定義的副作用的評估順序,上述這兩種評估方式正確,並可能實作其中一個。 若要確定您的程式碼移植且清楚,避免依存於特定的順序評估的副作用的陳述式。

請參閱

概念

運算式評估 (C)