2009-03-31 10 views
5

私はほとんど年以上VB.Netでの作業、ちょうどこのVB到達不能コードのエラー/警告

は私が非常識つもりです、またはVB.Net ではないが「到達不能コード」を持っているん注目されてきました警告?

以下は、2つのwriteline呼び出しの間にリターンがあっても、警告またはエラーが発生した場合、naryを使って非常にうまくコンパイルされます。

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

私に何か不足していますか?これを私が見つけることができないものに切り替える方法がありますか?

もしそうでない場合は、省略理由がありますか? (つまり、これは悲惨な状況だと思うのですが)

この質問については、暴言の気を許してください、それは暴言ではありません、私は答えが欲しいです。

おかげ


私はバグ#428529

として、MS Connectでこれを調達して更新

私はVBチームのプログラムマネージャから

を次のように受け

ご報告いただきありがとうございます この問題。コンパイラはこのシナリオに対して のサポートを制限しています。 は、 到達不能コードに関する警告は表示されません。

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

この場合、あなたは xが割り当てされていないという警告を取得します:以下のように としてのフロー分析 アルゴリズムが扱うんいくつかの シナリオがあります。 の場合は、 を使用して、今後のリリースでは の実装を検討します。

+2

(炎)あなたはVBを使用しているので、コンパイラはあなたを嘲笑しています(/炎)申し訳ありません。 –

+0

イアン、もし私がコメントのために投票できたら:) –

答えて

4

私の推測では、それはコンパイラの見落としです。フロー制御は、どの言語でも、特に非常に多くの異なるフロー制御メカニズムを持つVBのような言語で正しいことを得るのは非常に難しい問題です。例えば、

  • 例外
  • あなたがこの問題について強く感じる場合
  • は出口が

を呼び出し、エラー(再開、後藤、等...)で後藤

  • ください。Connectにバグを報告してください。Connectを介して提出されたバグを真剣に受け止め、可能な限り多くの問題を解決するために全力を尽くします。

  • +0

    私はあなたの言うことを知っている。 。 。 C#にはgotoがあり、関数の途中でリターンでき、try/finallyブロックがあります。 。 。それでも到達不能なコードを見つけることができます。私はバグをオープンしました。リンクのために –

    +0

    @Binary、VBの制御フローの使用は、C#のものよりもあまり制限の少ない**です。その多くはVB6日から保留されていますが、これらの成果物は適切なコードフロー分析を行うことを非常に困難にします。接続バグ番号をここに投稿できますか? – JaredPar

    +0

    Jared、まだGotoを使用している人、エラー時には誰でも得るものに値する。私たちはOption Strict Onですべてを実行し、 "more"を期待しています:)バグ番号は428529です。ありがとう。 –

    0

    AFAIK、VB.NETでは警告が表示されません。しかし、C#は行います。

    1

    私はジャレッドの答えに対処したいと思います。

    彼が持っている問題のほとんどは、データフロー分析には問題ありません。

    "On Error/Resume"は例外です。彼らはかなり悪いデータフロー分析を混乱させる。声明「エラー時に」複数の方法で使用される、またはされている場合は

    「再開次の」文が使用されている、あなただけのデータフローをオフにすることができます:

    しかし、それはかなり簡単な問題が軽減するようです一般的な警告を報告します。良いものは、 "On Error/Resumeが廃止されました。代わりに例外を使用してください。"のようなものかもしれません。 :)

    "On Error"文と "resume"文が1つしかない場合は、通常のデータフロー解析を行うことができます。

    大きな問題は、既存のDFAコードの実装方法です。それはコントロールフローグラフを使用しないので、それを変更することは本当に高価なものになります。この種の問題に対処したい場合は、既存のDFAコードを取り除き、コントロールフローグラフを使用するものに置き換える必要があります。

    関連する問題