編譯器與不確定參數求值順序
C 標準允許實作以任何順序求值函數參數。這會影響程序行為嗎?
推測的問題
考慮以下程式碼片段:
int i = 0; foo(i++, i++);
如果參數從左到右計算, i 在傳遞給foo 之前將增加兩次。但是,如果參數從右到左計算,i 將只增加一次。這會導致問題嗎?
編譯器和參數評估
雖然參數評估順序取決於實現,但大多數編譯器都遵循目標體系結構的呼叫約定。在 x86 上,Pascal 呼叫約定從左到右計算參數,而 C 呼叫約定 (__cdecl) 從右到左計算它們。
編譯器通常會考慮到這一點,特別是對於跨平台程序,以避免意外的情況行為。
結論
參數評估順序與語言無關但依賴平台和實作。雖然標準沒有指定順序,但編譯器通常遵循目標體系結構的呼叫約定,並可能相應地調整計算順序。這可以確保在給出正確的呼叫約定的情況下,編寫不好的程式碼將表現一致。
以上是C 的不確定參數求值順序是否會影響程式行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!