2010-12-01 2 views
-2
void display() 
{ 
    printf("every thing is ok"); 
} 
void main() 
{ 
    int ch; 
    while(1) 
    { 
     printf("enter your choice"); 
     scanf("%d",&ch); 
     switch(ch) 

     { 
      case 1: clrscr();printf("when choice is one every thing is fine"); 
        display(); 
        break; 
      case 2: clrscr();printf("when chice is two its confusing"); 
        display(); 
        break; 
      case 3: exit(0); 
      default: printf("enter choice as 1 or 2 or to exit enter 3"); 
     } 
    } 
} 

이 C 프로그램을 추적하고 선택 사항을 2로 입력하면 case 1 블록의 표시 기능이 호출됩니다. 난 그것을 이해하지 못 했어. 설명과 함께 회신 해주십시오. 나는 정말로 혼란 스럽다.c switch 문

+0

나에게 잘 보입니다. 1을 입력하면 어떻게됩니까? "case 1 블록에서 displau 함수를 호출"한다는 것은 무엇을 의미합니까? 제공된 코드에서 case 1과 case 2 모두에서 Display()가 호출됩니다. –

+1

예상되는 출력은 무엇이며보고있는 내용은 무엇입니까? – casablanca

+0

* 정확한 * 출력을 보여주십시오. 나는 그것이 재미있는 것을 밝힐 것이라고 믿는다. – abelenky

답변

4

컴파일러가 소스 문을 다시 배열하여 basic blocks을 무너 뜨릴 수 있습니다. 그런 다음 디버거는 두 경우 모두 display()에 대한 호출을 동일한 소스 행 번호에 대응시킵니다. 최적화가 활성화 된 경우 일반적입니다.

+0

아니요, 'scanf'줄이 예를 들어. '1'을 '1'로 설정하십시오. – aschepler

+0

훨씬 더 의미가 있습니다. – meagar

0

컴파일러는 서로 다른 두 가지 경우에 동일한 함수 호출을 볼 때 최적화를 통해 멋진 작업을 수행 할 수 있습니다. 컴파일러 플래그를 확인하거나 다른 인수를 display()에 추가하여 지정한대로 실제로 호출되는지 확인하십시오.

0

컴파일러는 코드를보다 효율적으로 변형합니다. 디버깅을 시도 할 때 혼동을 줄 수 있으므로 최적화를 해제해야합니다 (컴파일러 또는 IDE에 따라 다릅니다).

당신이 printfcase 1case 2이 동일 한 후, 당신은 단지 하나의 호출 display에있는 것이 더 효율적이 될 수 있음을 인식해야한다고 코드에 통지하는 경우 - 사례 중 하나가 바로 마지막으로 이동합니다 다른 사건의 진술과 프로그램의 결과는 같습니다.

당신은 그 이상으로 갈 수 있습니다. case 1case 2 사이의 유일한 실제 차이점은 인쇄 될 문자열에 대한 포인터를 설정하는 약간의 코드를 제외하고 인쇄 된 문자열이 전체 코드 블록 하나만 가질 수 있기 때문입니다.

관련 문제