某些类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
循环的更新部分中使用多个语句,但是没有为这些语句定义排序或使用从左到右的顺序?
答案 0 :(得分:2)
从技术上讲,这是一个单一的表达,而不是一个或多个陈述,尽管这种区别并不是非常重要。
好老C只会对有关这样的订单表达式的评估做出有限的承诺。在您的示例中,订单无关紧要。但请考虑这个表达式:
a[i++] = i
如果在评估此表达式之前i
为1,那么a[1]
现在应该等于1还是2?据我了解C规范,这个表达式的行为是未定义的,这意味着你得到的东西取决于你使用的编译器。
感谢@mizo在sequence points上的可读参考,并感谢@ChrisDodd指出如果您正在进行由逗号运算符分隔的简单独立赋值,则C和C ++会完全指定左到正确的评估顺序。