为什么`j = ++ i + ++ i;`的输出在C#和C中有所不同?

时间:2014-07-14 11:14:12

标签: c# c pre-increment

int i=1,j;
j= ++i + ++i;
printf("%d",j);

这个程序的输出是C. 6 C.But当我对C#使用相同的逻辑时, 输出为5

我想知道同一逻辑在两种不同语言中表现不同的原因

1 个答案:

答案 0 :(得分:17)

C#中的规则是" 严格从左到右评估每个子表达"。因此

j= ++i + ++i ;  

在C#中定义明确,但同一个表达式在C中调用undefined behavior,因为您无法在两个sequence points之间多次修改变量。

C-FAQ

  

标准规定

     

在上一个和下一个序列点之间,对象的存储值最多只能通过表达式的修改一次修改。此外,只能访问先前值以确定要存储的值。)

Eric Lippert阅读本文,以获得进一步说明:Precedence vs Associativity vs Order