哪些语言不能为多语句语句定义执行顺序?

时间:2012-11-12 23:55:12

标签: syntax for-loop

某些类C语言允许在for语句的更新部分中使用多个语句,例如

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

Java在JLS 14.14.1.2中明确定义了这些语句的顺序,ECMA-334的15.8.3(C#)中说“for-iterator的表达式,如果有的话,在 顺序“我从左到右阅读。

哪些语言(如果有的话)允许在for循环的更新部分中使用多个语句,但是没有为这些语句定义排序或使用从左到右的顺序?

修改:删除了C标记,因为它开始了序列点讨论,there's plenty已发现of that

1 个答案:

答案 0 :(得分:2)

从技术上讲,这是一个单一的表达,而不是一个或多个陈述,尽管这种区别并不是非常重要。

好老C只会对有关这样的订单表达式的评估做出有限的承诺。在您的示例中,订单无关紧要。但请考虑这个表达式:

a[i++] = i

如果在评估此表达式之前i为1,那么a[1]现在应该等于1还是2?据我了解C规范,这个表达式的行为是未定义的,这意味着你得到的东西取决于你使用的编译器。


感谢@mizo在sequence points上的可读参考,并感谢@ChrisDodd指出如果您正在进行由逗号运算符分隔的简单独立赋值,则C和C ++会完全指定左到正确的评估顺序。