2012-12-21 2 views
-1

고토 문 .. 사실 내가 말 GOTO 문으로 난독 화 된 코드를 공부하려고 해요

private void fun() 
{ 
if(somecondition) 
    goto LABEL3; 

... 
... 

LABEL3: 
    return; 
    Exception e; 
    e; 
    if(true) goto LABEL3; else LABEL7; 


... 
... 

LABEL7: 
    //some statements 
} 

와 IF 문에 의해 LABEL3를 호출시

,
이 정지를 작동합니다 실현? LABEL7이 (가) 호출됩니까?
프로그램이 어떻게 진행 되나요?

이 디 컴파일 자바 클래스 파일을입니다
몇몇의 문장을 읽을하기가 어렵게 만들기위한 (조합 고토로하고 경우 WHILE, 예를 들어 용) 고토에 의해 대체되고있다 디 컴파일 클래스 파일.

편집이 Becoz 내가 디 컴파일 클래스 파일은 자바 구문을 완전히 inaccordance 것입니다 가정, 나는이 질문을 게시 대신 디 컴파일러는 종종 아직 몇 가지 기본 구문을 유지 pseudocodes를 생성하는 데 사용. 그렇습니다. goto가 없지만 그냥 가짜 키워드가 있고 예 LABEL3이 (가) 반환 할 수 있고 다른 사용자는 도달 할 수 없습니다.

+0

어떤 언어입니까? 질문은'[java]'라고 태그가 붙지 만, 코드는 분명히 자바가 아닙니다. – NPE

+0

분명히 자바가 아닙니다 – Alp

+0

그냥 디버깅하면 워크 플로우가 무엇인지 알 수 있습니다. –

답변

1

조건이 if(somecondition) 인 경우 함수가 종료됩니다. 따라서 LABEL7은 호출되지 않습니다. return은 "함수에서 반환"을 의미하고 goto-block에서 반환하지 말아야합니다. 적어도 Java (또는 다른 언어가 주석에서 Java로 보이지 않는 경우)는 gotoreturn의 일반적인 정의를 변경하지 않았습니다.

사실, return; 이후의 모든 내용이 궁금합니다. return (레이블) 뒤에 다른 진입 점이 없으므로 절대로 호출해서는 안됩니다. 완전히의 .class 그런 경우

디 컴파일, (클래스 파일의 마지막에 자바 주석에서) 오류를 검사 할 수없는 경우

3

이 코드 조각은 JAD의 출력과 같습니다. 아마 당신이 게시 한 코드 블록과 관련해서 어떤 것이있을 것입니다.

+0

예 실제로 자바 소스 코드가 아니라 의사 코드를 생성하지 않았다. 오류 로그도없고 아무것도 없다. – everlasto

+0

자바 파일의 끝에있는 소스 코드의 주석을보고 디 컴파일하는 동안 오류를 참조해야합니다. 일반적으로 정적 블록이나 정적 선언에서 발생합니다. – richardtz

+0

동기화 된 블록을 디 컴파일 할 때 항상 이런 일이 발생합니다. – richardtz