C 中參數求值順序的編譯器最佳化
C 標準允許編譯器自行選擇函數參數的求值順序。這就提出了一個問題:現實世界的實現是否利用這種模糊性來提高效能。
在大多數情況下,編譯器不會最佳化參數求值順序。然而,體系結構、呼叫約定和參數類型會影響行為。在 x86 計算機上,Pascal 呼叫約定從左到右計算參數,而 C 約定 (__cdecl) 從右到左計算參數。與平台無關的程式通常會考慮呼叫約定以避免意外。
例如,在經典的程式碼片段中:
int i = 0; foo(i++, i++);
在Pascal 呼叫約定中,編譯器可能會在i 之前計算i,但是相反的情況可能發生在__cdecl 中。儘管如此,結果是未定義的,並且不鼓勵依賴特定的評估順序。
請注意,語言標準將參數評估順序分類為“未指定”,這意味著它沒有明確定義或不允許。這允許依賴實現的行為並強調抽象機的不確定性。
以上是C 編譯器最佳化是否利用參數求值順序歧義?的詳細內容。更多資訊請關注PHP中文網其他相關文章!