2013-05-13 1 views
4

나는 누군가의 C 코드를보고 있으며 심지어 내가 모르는 것을 발견했다. 일부 경우에는 switch 변수가 수정되어 또 다른 대소 문자가 구분 기호 뒤에 실행됩니다.스위치 문 냄새입니까?

switch (variable) 
{ 
    case 1: 
     some_code(); 
     variable = 3; 
     break; 

    case 2: 
     more_code(); 
     variable = 5; 
     break; 

    case 3: 
     more_code(); 
     variable = 5; 
     break; 

    case 4: 
     my_code(); 
     break; 

    case 5: 
     final_code(); 
     break; 

} 

작성자가 의도 한대로 코드가 작동하는 것 같습니다. 하지만 그는 운이 좋았습니까, 아니면 C에서 보장 된 동작입니까? 나는 항상 break 문을 사용하면 switch 문 바로 다음으로 실행이 이동하게된다고 가정했습니다. 나는 다른 모든 경우를 계속해서 테스트 할 것이라고 기대하지 못했습니다.

+3

매우 일반적인 관용어입니다 (예 : 상태 머신 용. –

+0

난독 화 된 'while'을 만드는데 사용할 수 있습니까? – Kninnug

답변

7

이것은 상태 시스템 유형 코드에 대한 일반적인 기술입니다. 그러나 그것은 당신이 상상하는 것처럼 자동으로 뛰지 않습니다. switch 문은 while 루프 내에 있어야합니다. 이 경우, 나는 루프 같은 것을 보일 것 상상 :

while (!done) { 
    done = (variable == 5); 
    switch (variable) { 
    /*...*/ 
    } 
} 

는 다른 방법으로, switch 문은 함수 본체 내부의 수를하고, 수행 조건이 충족 될 때까지 그 기능은 루프에서 호출됩니다.

+0

좋아, 그게 설명해. 스위치는 인터럽트 핸들러 내부에 있으므로 반복적으로 호출됩니다. – Rocketmagnet

+0

@Rocketmagnet : 아, 그래, 같은 생각이야. – jxh