2009-03-31 6 views
5

내가 주로 년 이상에 대한 VB.Net 작업 단이VB 연결할 코드 오류/

내가 VB.Net 을 미쳐, 또는 않는 건가요 발견했습니다 NOT에 "도달 할 수없는 코드"가 경고?

다음은 두 개의 writeline 호출 사이에 리턴이 있더라도 경고 또는 오류가 발생하면 매우 편리하게 컴파일됩니다.

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

나는 뭔가가 부족합니까? 내가 찾을 수없는 것을 전환 할 수있는 방법이 있습니까?

그렇지 않은 경우 누락 될 수있는 충분한 이유가 있습니까? (즉, 이것은 비참한 상태라고 생각하는 것이 옳다.)

이 질문에 대한 호언 장담을 용서하면, 그것은 호언 장담이 아니다. 나는 대답을 원한다.

감사


나는 버그 #으로, MS Connect에이 문제를 제기 한 428,529

업데이트 나는 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

    @ 바이너리, 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"문 중 하나만있는 일반적인 경우에는 정상적인 데이터 흐름 분석을 수행 할 수 있으며 이로부터 합리적인 결과를 얻어야합니다.

    큰 문제는 기존 DFA 코드가 구현되는 방식입니다. 그것은 제어 흐름 그래프를 사용하지 않으며, 따라서 그것을 변경하는 것은 정말로 비싸게 끝납니다. 이러한 종류의 문제를 해결하려면 기존 DFA 코드를 추출하고 컨트롤 흐름 그래프를 사용하는 코드로 대체해야합니다.

    관련 문제