【问题标题】:Is it possible for the Vb.Net compiler to switch on an "Unreachable code" warning?Vb.Net 编译器是否可以打开“无法访问的代码”警告?
【发布时间】:2009-03-31 13:21:52
【问题描述】:

一年多来我主要使用 VB.Net 并注意到这一点

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

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

Sub Main()
    Console.WriteLine("Hello World")
    Return
    Console.WriteLine("Unreachable code, will never run")
End Sub

我错过了什么吗?有什么方法可以打开这个我找不到的。

如果没有,是否有充分的理由省略它? (即,或者我认为这是一种可悲的情况是正确的)

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

谢谢


我在 MS Connect 上提出了这个问题,错误号为 428529

更新

我从 VB Teams 项目经理那里收到了以下信息

感谢您抽出宝贵时间报告 这个问题。编译器有限制 支持这种情况,并且当你 指出我们没有警告 无法访问的代码。有一些 我们的流量分析的场景 算法确实处理,例如 以下:

Sub Main()
    Dim x As Integer
    Return
    x = 4
End Sub

在这种情况下,您会收到一条警告: x 从未被分配。为了 你提到的情况,但是我们会有 看看实现它 未来版本。

【问题讨论】:

  • (flame)你用的是VB所以编译器在嘲笑你(/flame)对不起。
  • 伊恩,如果我可以为评论投票:)

标签: vb.net compiler-construction


【解决方案1】:

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

  • 例外情况
  • 转到
  • 出错时(恢复、转到等...)
  • 退出通话

如果您对此问题有强烈的感觉,Connect 上提交错误。我们确实非常重视通过 Connect 提交的错误,并尽最大努力修复尽可能多的错误。

【讨论】:

  • 我知道你在说什么,但是。 . . C# 有 goto,允许在函数中间返回,有 try / finally 块。 . .并且它仍然可以发现无法访问的代码。我打开了一个错误,谢谢你的链接
  • @Binary,VB 对控制流的使用比 C# 的限制。其中大部分是从 VB6 时代开始的,但是这些工件使得进行适当的代码流分析变得更加困难。可以在这里发布连接错误编号吗?
  • Jared,任何仍在使用 Goto、On error 等的人都应该得到他们所得到的。我们使用 Option Strict On 运行所有内容,并期待“更多”:) 错误号是 428529。谢谢队友
  • P.S.如果由我决定,我会每天早上花 30 分钟将不同的项目移植到 C# 并完成它。 . .但这不取决于我
  • 选择正确答案纯粹是为了建议将此作为错误提出
【解决方案2】:

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

https://stackoverflow.com/questions/210187/usage-statistics-c-versus-vb-net

查看上一篇文章。

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

http://www.jetbrains.com/resharper/

【讨论】:

    【解决方案3】:

    我想谈谈 Jared 的回答。

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

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

    但是,这是一个非常简单的问题:

    如果在一个方法中使用了多个“On Error”语句,或者使用了“Resume next”语句,您可以关闭数据流分析并报告一般警告。一个好的可能是“不推荐使用错误/恢复,改用异常”。 :)

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

    最大的问题在于现有 DFA 代码的实现方式。它不使用控制流图,因此更改它最终会非常昂贵。我认为,如果您想解决这类问题,您确实需要删除现有的 DFA 代码并将其替换为使用控制流图的代码。

    【讨论】:

      【解决方案4】:

      AFAIK,你说得对,VB.NET 没有给你警告。 C# 可以。

      【讨论】:

        猜你喜欢
        • 2014-01-16
        • 1970-01-01
        • 1970-01-01
        • 2015-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多