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

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

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

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

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

 j= ++i + ++i ; 

在C#中定义良好,但同一个表达式在C中调用未定义的行为 ,因为您无法在两个序列点之间多次修改变量。

C-FAQ :

标准规定了这一点

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

请阅读Eric Lippert撰写的这篇文章,以获得进一步的解释: 优先级与关联性与顺序 。