2012-11-12 48 views
1

某些C語言語言允許在for語句的更新部分中有多個語句,例如哪些語言沒有爲多語句語句定義執行順序?

for (int i = 0; i < limit; i++, butter--, syrup--, pancakesDevoured++) 

爪哇明確地定義了在JLS 14.14.1.2和ECMA-334(C#)的15.8.3這樣的陳述的順序說其中I」「的用於迭代器,如果有的話,在 序列被評估的表述」從左到右閱讀。

什麼語言允許for循環的更新部分中有多條語句,但是沒有爲這些語句定義排序或使用除左到右以外的順序?

編輯:刪除了C標記,因爲這啓動了一個序列點討論,並且there'splentyof that已經。

+0

在稱爲[逗號運算符](http://en.wikipedia.org/wiki/Comma_o​​perator)的C中,並不是'for'循環所獨有的。 – mizo

回答

2

從技術上講,這是一個單一的表達式,而不是一個或多個語句,但區別不是非常重要。

良好的舊C只會對有關這些順序表達式的評估做出有限的承諾。在您的示例中,順序無關緊要。但考慮這個表達式:

a[i++] = i 

如果i爲1評價這一表達,應該a[1]現在等於1或2之前?據我瞭解C規範,這個表達式的行爲是不確定的,這意味着你得到的取決於你使用的編譯器。


感謝@mizo對sequence points可讀參考,並@ChrisDodd的指出,如果你正在做的是由逗號分隔的操作簡單的獨立指派,C和C++不完全指定左從右向右評估訂單。

+1

瞭解[序列點](http://en.wikipedia.org/wiki/Sequence_point)如何工作是關鍵。 – mizo

+2

請注意,逗號運算符是一個序列點。 –