首页 新闻 会员 周边 捐助

C 与 C# 编译的一点不同

0
悬赏园豆:10 [已解决问题] 解决于 2015-05-03 00:40

各位大大知道为什么a在C 和 C#中的结果不一样吗?

int a=12;

a += a -= a;

a = ?

 

正如大家回答的,在C中a=0, C#中a=12,所以我现在的问题是它们分别怎么实现的啊??

C c#
Williame的主页 Williame | 初学一级 | 园豆:32
提问于:2015-04-29 00:10
< >
分享
最佳答案
0

C应该是0,C#应该是12。是不是呢?

收获园豆:10
幻天芒 | 高人七级 |园豆:37207 | 2015-04-29 08:56

是的呢。 那是为什么呢?

Williame | 园豆:32 (初学一级) | 2015-04-30 00:10

@Williame: 按照我的理解,首先在C里面,是从右到左,然后a只有一个地址在存值,所以先执行a-=a,此时a变成了0,导致执行a+=a时,a= a+a=0+0 = 0

在C#中,还是从右到左,但是a-=a的临时结果值,被放在的其他地方,导致执行 a+=x时,等价于a=a+0 = 12。

以上仅个人理解。

幻天芒 | 园豆:37207 (高人七级) | 2015-04-30 09:19
其他回答(4)
0

这个不会不一样吧?应该是0吧

吴瑞祥 | 园豆:29449 (高人七级) | 2015-04-29 09:09

确实不一样

支持(0) 反对(0) Williame | 园豆:32 (初学一级) | 2015-04-30 00:10
0

1、需要实验,实验后就知道了。

2、这样的语句是从右到左执行的。

3、最终结果是受编译器限制的,可能是0,也可能是12。

4、不能简单的理解成(a+=(a-=a))

5、对于别人这样写,可能是基于特定的编译器,也可能是对结果本身不看重(当作可能的随机数看待)

6、自己如果不是基于5的原因,千万别这样写。

比如一段代码:

int a()

{

int index = 0;

try

{

index ++;

return index;

}

finaly

{

index++;

}

}

结果应该是1还是2呢?也是受编译器限制的(当然一般都是1)。

另外一段代码(js的):

foo = {a:1}

foo.x=foo={a:2}

请问:foo.x是多少?

这个也是很有意思的。

}

519740105 | 园豆:5810 (大侠五级) | 2015-04-29 09:28

是挺有意思, 所以我才来问了嘛

支持(0) 反对(0) Williame | 园豆:32 (初学一级) | 2015-04-30 00:12

@Williame: 如果不是专注于编译原理,一般这样的问题,我都是当作兴趣来看看,然后使用没有歧义的语法来编写代码。

支持(0) 反对(0) 519740105 | 园豆:5810 (大侠五级) | 2015-04-30 09:08
0

这个是和编译器里面的处理机制有关系的,不管你用C还是C# ,不同编译器出来的结果可能不同。我以前也遇到这个问题,而且还是用的相同的编译器,VS2010和VS2013出来结果也不同

xcyk | 园豆:202 (菜鸟二级) | 2015-04-29 13:46

是的

支持(0) 反对(0) Williame | 园豆:32 (初学一级) | 2015-04-30 00:11
0

股票上涨全世界都是绿的,红的是下跌。

只有某国是红的上涨,绿的下跌。

语义的不同本来就是看谁来解释。

爱编程的大叔 | 园豆:30844 (高人七级) | 2015-04-29 15:53

哈哈,所以我想知道它们各自怎么实现的

支持(0) 反对(0) Williame | 园豆:32 (初学一级) | 2015-04-30 00:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册