2009-03-31 11 views
5

Ich habe meistens wurde mit VB.Net seit über ein Jahr arbeiten und habe gerade bemerkt, dieseVB nicht erreichbar Codefehler/Warnung

Bin ich verrückt, oder tut VB.Net NICHT hat einen „nicht erreichbar Code“ Warnung?

Das folgende kompiliert ziemlich glücklich mit nary eine Warnung oder ein Fehler, obwohl es eine Rückkehr zwischen den zwei Schreibrelaisanrufen gibt.

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

Fehle ich etwas? Gibt es einen Weg, dies einzuschalten, den ich nicht finden kann?

Wenn nicht, gibt es einen guten Grund für die Unterlassung? (d. h. oder habe ich recht, wenn ich denke, dass dies ein trauriger Zustand ist)

Verzeihen Sie die Luft der Tirade über diese Frage, es ist keine Tirade, ich hätte gerne eine Antwort.

Dank


Ich habe dies als Bug # 428529 auf MS Connect, hob

aktualisieren

ich folgendes von der VB Teams Programmmanager erhielt

Danke, dass Sie sich die Zeit genommen haben, uns zu melden dieses Problem. Der Compiler hat Unterstützung für dieses Szenario begrenzt, und wie Sie darauf hinweisen, haben wir keine Warnungen für nicht erreichbaren Code. Es gibt einige Szenarien, die unsere Flussanalyse Algorithmus handhaben ist, wie die folgende:

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

In diesem Fall werden Sie eine Warnung erhalten, dass x zugewiesen nie. Für den Fall, den Sie erwähnten, haben wir jedoch , um das für eine zukünftige Version zu implementieren.

+2

(Flamme) Sie verwenden VB so der Compiler verspottet Sie (/ Flamme) Entschuldigung. –

+0

Ian, wenn ich für einen Kommentar abstimmen könnte :) –

Antwort

4

Meine Vermutung ist, dass es ein Versehen im Compiler ist. Die Flusskontrolle ist ein sehr schwieriges Problem, um in jeder Sprache korrekt zu sein, besonders aber in einer Sprache wie VB, die so viele verschiedene Flusskontrollmechanismen hat. Zum Beispiel

  • Ausnahmen
  • Goto
  • On Error (Lebenslauf, Springen, etc ...)
  • Ausfahrt

ruft Wenn Sie stark zu diesem Thema fühlen, bitte Datei einen Fehler auf Connect.Wir nehmen Fehler, die über Connect gemeldet wurden, sehr ernst und tun unser Bestes, um so viele wie möglich zu beheben.

+0

Ich weiß was du sagst, aber. . . C# hat Goto, erlaubt Rückgaben mitten in Funktionen, hat try/finally-Blöcke. . . UND es kann immer noch unerreichbaren Code erkennen. Ich habe einen Fehler geöffnet, danke für den Link –

+0

@Binary, VB Verwendung von Kontrollfluss ist jedoch viel weniger restriktiv als C#. Vieles davon ist von VB6-Tagen übrig geblieben, aber diese Artefakte machen es wesentlich schwieriger, eine korrekte Code-Fluss-Analyse durchzuführen. Kannst du bitte die Connect Bug Nummer hier posten? – JaredPar

+0

Jared, jeder, der immer noch Goto, Fehler usw. benutzt, verdient, was er bekommt. Wir laufen alles mit Option Strict On und erwarten "mehr" :) Bug-Nummer ist 428529. Danke Kumpel –

0

AFAIK, Sie haben Recht, dass VB.NET keine Warnung gibt. C# tut es aber.

1

Ich mag Jared Antwort ansprechen würde.

Die meisten Probleme, die er aufwirft, sind für die Datenflussanalyse nicht problematisch.

Die einzige Ausnahme ist "On Error/Resume". Sie vermasseln Datenflussanalyse ziemlich schlecht.

Allerdings ist es ein ziemlich einfaches Problem zu mildern:

Wenn mehr als ein „On Error“ Anweisung in einem Verfahren verwendet wird, oder die „Resume Next“ Anweisung verwendet wird, können Sie nur den Datenfluss ausschalten analysieren und melden eine generische Warnung. Eine gute könnte etwas wie "On Error/Resume sind veraltet, verwenden Sie stattdessen Ausnahmen." :)

Im allgemeinen Fall von nur einer "On Error" -Anweisung und keine "resume" -Anweisung, können Sie so ziemlich normale Datenflussanalyse tun, und sollte vernünftige Ergebnisse daraus erhalten.

Das große Problem ist mit der Art, wie der vorhandene DFA-Code implementiert wird. Es verwendet kein Kontrollflussdiagramm und daher ist es sehr teuer, es zu ändern. Ich denke, wenn Sie diese Art von Problemen behandeln möchten, müssen Sie wirklich den vorhandenen DFA-Code ausreißen und es durch etwas ersetzen, das ein Kontrollflussdiagramm verwendet.

Verwandte Themen