为什么' j= ++ i++ +i; '在c#和C中的输出不同?

本文关键字:输出 i++ 为什么 | 更新日期: 2023-09-27 18:12:53

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

这个程序的输出是C中的6,但是当我在c#中使用相同的逻辑时,输出为5

我想知道为什么相同的逻辑在两种不同的语言中表现不同

为什么' j= ++ i++ +i; '在c#和C中的输出不同?

c#中的规则是"严格从左到右计算每个子表达式"。因此

j= ++i + ++i ;  

在c# 中定义得很好,但是同一个表达式在C中调用未定义的行为,因为你不能在两个序列点之间多次修改变量。

C-FAQ:

标准规定

在前一个序列点和下一个序列点之间,对象的存储值最多只能通过表达式的求值修改一次。而且,只有在确定要存储的值时才能访问先前的值。

请阅读Eric Lippert的文章以获得进一步的解释:优先级vs结合性vs顺序。