积极答复者
VS2010 编译器bug

问题
-
if (true) { if (false) { int i; } int i;//编译器报告说这里不能重复声明变量i, 但实际上在这个地方if(false)中的i早已经结束生命周期了. 这里编译报错应该是一个误判. i = 1; }
- 已更改类型 Charles Shao 2011年2月6日 15:40 以前怎么显示为讨论了
答案
-
其实这不叫“结束生命周期”,结束生命周期只是在函数调用完毕,返回上一级调用栈时发生。
但这确实是一个问题,以上代码在java中是可以编译通过的。
不!!在if区块里宣告的变数,离开if区块后就结束生命周期,这比函数拥有更短的生命周期。
我在猜是VS本身不允许在同一方法内宣告重复名称,这应该请MS工作人员向总部了解,我自己也很想知道
秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
明显就是一个bug, 不论是什么高级语言, 变量脱离生命周期以后,在语法生都应被看作已经消亡---不论内存是如何理解的.以上在C , C++ , Java 都是没有问题的. 显然是VS的Bug...
另, MVP不能直接与MS的人进行沟通或报告bug么?
- 已标记为答案 Charles Shao 2011年2月6日 15:40
全部回复
-
其实这不叫“结束生命周期”,结束生命周期只是在函数调用完毕,返回上一级调用栈时发生。
但这确实是一个问题,以上代码在java中是可以编译通过的。
不!!在if区块里宣告的变数,离开if区块后就结束生命周期,这比函数拥有更短的生命周期。
我在猜是VS本身不允许在同一方法内宣告重复名称,这应该请MS工作人员向总部了解,我自己也很想知道
秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
明显就是一个bug, 不论是什么高级语言, 变量脱离生命周期以后,在语法生都应被看作已经消亡---不论内存是如何理解的.以上在C , C++ , Java 都是没有问题的. 显然是VS的Bug...
另, MVP不能直接与MS的人进行沟通或报告bug么?
- 已标记为答案 Charles Shao 2011年2月6日 15:40