2013-08-18 3 views
0

쉼표로 다른 값을 구분하는 switch case 문에 여러 값을 전달할 수 있습니까? 표현식은 무엇으로 평가 될까요? 오류가 발생하지 않으면 여러 값 중 컴파일러가 스위치를 평가합니까? 쉼표 연산자의 우선 순위가 낮은 것을 염두에 두시겠습니까? 다음과 같이 내가 코드를 작성 예를 들어 말 :여러 값을 전달하여 값을 쉼표로 구분 전환

int m=10; 
switch(m, m*2) 
{ 
    case 10: printf("\n case 10"); 
    case 20: printf("\n case 20"); 
    case 30: printf("\n case 30"); 
    default: printf("\n no case"); 
} 
+1

코드에서 'm * 2'와 대소 문자가 일치하면 모든 후속 사례가 실행됩니다. 'break '는 종종 그 것을 막기 위해 사용되지만 어쩌면 당신은 그것을 원하지 않을 것입니다. –

+0

은 "break;"를 추가하는 것을 잊지 마십시오. 사례 간의 진술. – OldProgrammer

답변

4

쉼표 연산자는 모든 표현을 평가하고 가장 오른쪽의 값을 반환합니다. (그것은 당신이 switch에서 사용하고 어떤 차이가되지 않습니다.)

귀하의 예를 정확하게 switch (m*2)과 동일하지만, 위의 표현 중 하나가 부작용이 있다면, 그 부작용이 전에 적용된다 switch 문이 실행되었습니다.

+0

연산자가 반환하기 전에 모든 식을 실행한다는 점을 언급해야합니다. 그래서 그것은 스위치에서 그것을 사용하는 센스를 만들 수 있습니다 –

+0

@ a.lasram : 고마워, 편집. – RichieHindle

+0

모든 표현식을 평가하는 것이 무엇을 의미하는지 설명해주십시오. 이것은 중괄호 안에있는 값과 일치하는 모든 경우를 평가한다는 것을 의미합니까, 아니면 오른쪽 끝에있는 값을 사용하여 일치시킬 것입니까? – user2693690

관련 문제