2013-09-28 3 views
-2

글쎄, 쉬운 질문이며 조금 명백 할 수도 있지만, 'if'가 거짓 조건을 가지고있을 때 컴파일러가 읽는가, 아니면 컴파일러가 직접 건너 뛰는가?조건이 거짓 일 때 'if'조건 (모든 언어)을 읽습니까?

감사합니다. :)

+0

최적화 컴파일러는 도달 할 수없는 코드이므로 아마 그것을 버립니다. – mak

+1

어떤 종류의 'if'와 어떤 언어입니까? 예를 들어, C와 일부 관련 언어의'#if false '는 "브랜치"가 파싱되지 않도록합니다. – harold

+0

이 경우 "읽음"은 무엇을 의미합니까? 'if' 조건이 false 인 경우 라 할지라도, 컴파일러가 실제로 그것을 읽음으로써 그것을 알기를 어떻게 기대합니까? – AnT

답변

1

Java에서는 최종 최적화 단계에서 바이트 코드에서 제거됩니다. 크기를 줄이려는 노력으로.

3

조건이 정적으로 false로 평가되면 컴파일러는이를 최적화 할 수 있습니다.

if (false) { 
    // The compiler may choose to drop this part from the compiled result 
} 

그러나 이것은 컴파일러에만 적용됩니다. 모든 언어에서 동일하지 않으며 모든 컴파일러에서 동일하지 않습니다. 사실 컴파일러에서 사용하는 최적화 설정에 따라 달라질 수 있습니다.

5

컴파일러는 항상 프로그램을 읽습니다. "if"조건이 충족되면 많은 최적화 컴파일러가 조건 값을 컴파일 할 때 평가할 수 있는지 여부를 분석합니다. 컴파일 타임에 알려진 경우 컴파일러는 생성 된 코드에서 조건을 완전히 제거 할 수 있습니다. 그러나 컴파일 타임에 조건 값을 알 수없는 경우 컴파일러는 런타임에 조건을 평가하기위한 코드를 생성합니다.

조건부 값에 따라 보통 조건부 점프 명령을 사용하여 오른쪽 코드 부분으로 이동합니다. 예 : 조건이 false 인 것으로 판명되면 CPU는 if 본문의 코드를 직접 건너 뜁니다.

관련 문제