2009-03-31 3 views
5

Я в основном работаю с VB.Net в течение года, и только заметил этоVB Недоступен код ошибки/предупреждения

ли я схожу с ума, или же VB.Net НЕ есть «недостижим код» предупреждение?

Следующие компиляции довольно счастливы с первым предупреждением или ошибкой, несмотря на то, что между двумя вызовами из письма есть ответ.

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

Я что-то не хватает? Есть ли способ переключить это на то, что я не могу найти.

Если нет, есть ли веская причина для его упущения? (то есть, или я прав, думая, что это горестное положение дел)

Простите пронзительный об этом вопросе, это не изречение, я бы хотел получить ответ.

Благодаря


Я поднял это на MS Connect, так как ошибка # 428529

Update

я получил следующее от менеджера программы VB команды

Спасибо, что нашли время сообщить об этот выпуск. Компилятор ограничил поддержку для этого сценария, и, как вы, , у нас нет предупреждений для недостижимого кода. Есть некоторые сценарии, что наш алгоритм анализа потока делает обрабатывать, такие как следующие:

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

В этом случае вы получите предупреждение, что х никогда не были назначены. Для случая вы упомянули, однако, что у нас будет , чтобы посмотреть на реализацию этого для будущей версии .

+2

(пламя) вы используете VB, поэтому компилятор насмехается над вами (/ пламя) извините. –

+0

Ian, если бы я мог проголосовать за комментарий :) –

ответ

4

Я предполагаю, что это недосмотр в компиляторе. Управление потоком - очень сложная проблема, чтобы получить правильное решение на любом языке, но особенно на языке, таком как VB, который имеет так много различных механизмов управления потоком. Так, например,

  • Исключения
  • Goto
  • On Error (Резюме, Гото и т.д ...)
  • Выход вызывает

Если вы сильно чувствуете по этому вопросу, пожалуйста введите ошибку на Connect.Мы очень серьезно относимся к ошибкам, поданным через Connect, и делаем все возможное, чтобы исправить как можно больше.

+0

Я знаю, что вы говорите, но. , , C# имеет goto, позволяет возвращаться в середине функций, имеет try/finally блокирует. , , И он все еще может обнаружить недостижимый код. Я открыл ошибку, спасибо за ссылку –

+0

@Binary, VB использует поток управления, хотя ** намного ** менее ограничительный, чем C#. Большая часть из них удерживается в течение дней VB6, но эти артефакты значительно усложняют выполнение надлежащего анализа потока кода. Можете ли вы разместить здесь номер ошибки подключения? – JaredPar

+0

Джаред, любой, кто все еще использует Goto, On error и т.д., заслуживает того, что они получают. Мы запускаем все с опцией Strict On и ожидаем «больше» :) Номер ошибки - 428529. Спасибо mate –

0

AFAIK, вы правы, что VB.NET не дает вам предупреждения. Однако C#.

1

Я хотел бы обратиться ответ Джареда.

Большинство проблем, которые он поднимает, не являются проблематичными для анализа потока данных.

Единственным исключением является «On Error/Resume». Они плохо переносят анализ потока данных.

Однако, это довольно простая задача для смягчения:

Если более чем один «On Error» заявление используется в методе, или «Резюме следующий» используется оператор, вы можете просто отключить поток данных анализировать и сообщать об общем предупреждении. Хорошим может быть что-то вроде «On Error/Resume устарели, используйте исключения вместо этого». :)

В обычном случае одного оператора «On Error» и оператора резюме нет, вы можете в значительной степени провести анализ потока данных и получить от него разумные результаты.

Большая проблема заключается в реализации существующего кода DFA. Он не использует график потока управления, и поэтому его изменение становится очень дорогостоящим. Я думаю, что если вы хотите решить эти проблемы, вам действительно нужно вырвать существующий код DFA и заменить его на что-то, что использует граф потока управления.

Смежные вопросы