2014-05-21 5 views

답변

2

추출 할 정보에 따라 다릅니다. 원칙적으로 브랜치를 검색하여 루프를 검색 할 수 있습니다.. 루프는 일반적인 코드 구조 없이도 작동 할 수 없으며 루프의 일부가 아닌 뒤로 분기를 찾을 수 없습니다.

그래서 당신은 그들에게, 명시 적으로 ifne 바이트 코드 지침 goto, goto_w, if_acmpeq, if_acmpne, if_icmpeq, if_icmpge, if_icmpgt, if_icmple, if_icmplt, if_icmpne, ifeq, ifge, ifgt, ifle, iflt을 모두 이름을 갖고 싶어 , ifnonnull, ifnull은 거꾸로 가리키면 루프를 나타낼 수 있습니다.

하지만 대부분의 경우 어떤 종류의 루프를 가지고 있는지 알 수 없을 것입니다. 컴파일 된 코드에서 for 루프와 while 루프 사이에는 큰 차이가 없습니다. 예를 들어, 다음 코드 조각은 완전히 동일합니다

  • for(a();b();c()) { 
        d(); 
    } 
    
  • a(); 
    for(;b();) { 
        d(); 
        c(); 
    } 
    
  • a(); 
    for(;;) { 
        if(!b()) break; 
        d(); 
        c(); 
    } 
    
  • a(); 
    while(b()) { 
        d(); 
        c(); 
    } 
    

그것은 더 복잡한 구조, 예를 들어,로 악화도 될 것입니다 동일한 코드 위치를 가리키는 두 개의 뒤로 분기가 본문 내의 조건문 continue 문 또는 두 개의 중첩 루프에 속한 단일 루프에 속하는지 여부를 확인하려는 경우 그것은 불가능한 것으로 판명 될 수 있습니다.