Vb.net VB无法访问的代码错误/警告

Vb.net VB无法访问的代码错误/警告,vb.net,compiler-construction,Vb.net,Compiler Construction,我在VB.Net上工作了一年多,刚刚注意到这一点 我是疯了,还是VB.Net没有“无法访问的代码”警告 下面的编译非常愉快,没有任何警告或错误,即使两个writeline调用之间有返回 Sub Main() Console.WriteLine("Hello World") Return Console.WriteLine("Unreachable code, will never run") End Sub 我错过什么了吗?有什么方法可以打开这个我找不到的 如果没有,是

我在VB.Net上工作了一年多,刚刚注意到这一点

我是疯了,还是VB.Net没有“无法访问的代码”警告

下面的编译非常愉快,没有任何警告或错误,即使两个writeline调用之间有返回

Sub Main()
    Console.WriteLine("Hello World")
    Return
    Console.WriteLine("Unreachable code, will never run")
End Sub
我错过什么了吗?有什么方法可以打开这个我找不到的

如果没有,是否有一个很好的理由来解释它的遗漏?(也就是说,或者我认为这是一种不幸的状况是对的)

请原谅我对这个问题的咆哮,这不是咆哮,我想要一个答案

谢谢


我把这件事提出来了,叫bug#428529

更新

我从VB团队项目经理处收到以下消息

感谢您抽出时间来报告 这个问题。编译器限制了 对该场景的支持,以及 请指出,我们没有警告 无法访问的代码。有一些 我们的流程分析中需要的场景 算法不处理,例如 以下:

在这种情况下,您将得到一个警告 从未分配过x。对于 你提到的案例,我们将有 要想在未来几年内实现这一点 未来版本


好吧,你是对的,VB.NET没有给你一个警告。但C#确实如此。

我猜这是编译器的疏忽。流控制在任何语言中都是一个很难纠正的问题,尤其是在像VB这样有很多不同流控制机制的语言中。比如说,

  • 例外情况
  • 后藤
  • 错误时(恢复、转到等…)
  • 退出呼叫

如果您对这个问题有强烈的感觉,请在上提交一个bug。我们非常认真地对待通过Connect提交的bug,并尽最大努力修复尽可能多的bug

他们在下面的帖子中提到了这一点:

见最后一篇文章

我想您可以使用FXCop检查代码,或者从以下位置获取Resharper的副本:


我想谈谈贾里德的答案

他提出的大多数问题对于数据流分析来说都没有问题

唯一的例外是“出错/恢复”。他们把数据流分析搞得一团糟

然而,缓解这一问题非常简单:

如果一个方法中使用了多个“On Error”语句,或者使用了“Resume next”语句,则可以关闭数据流分析并报告一般警告。一个好的例子可能类似于“当错误/恢复被弃用时,请改用异常。”:)

在只有一条“On Error”语句而没有“resume”语句的常见情况下,您几乎可以进行正常的数据流分析,并且应该从中得到合理的结果


最大的问题是现有DFA代码的实现方式。它不使用控制流图,因此更改它会非常昂贵。我认为,如果你想解决这些问题,你真的需要删除现有的DFA代码,并用使用控制流图的东西来替换它

(火焰)你在使用VB,所以编译器在嘲笑你(/flame)对不起。伊恩,如果我可以投票给你一个评论:)我知道你在说什么,但是。C有GOTO,允许在函数中间返回,已经尝试/最后块…它仍然可以发现无法访问的代码。我打开了一个bug,谢谢你的帮助link@Binary但是,VB对控制流的使用比C#的限制要小得多。其中大部分都是VB6遗留下来的,但是这些工件使得进行正确的代码流分析变得非常困难。你能在这里发布连接错误号吗?Jared,任何仍然使用Goto、On error等的人都应该得到他们应得的。我们使用Option Strict On运行所有操作,并期望“更多”:)错误号为428529。谢谢mateP.S。如果由我决定的话,我会每天早上花30分钟将不同的项目移植到C#并完成它。但这并不是由Myselect作为正确答案,而是由purly提供建议,将其作为bug提出
Sub Main()
    Dim x As Integer
    Return
    x = 4
End Sub