2016-06-13 4 views
6
int main() 
{ 
    switch(1,2) 
    { 
     case 1:printf("1");break; 
     case 2:printf("2");break; 
     default: printf("error");break; 
    } 
} 

c에서 유효합니까?c에서 switch 문은 2 개의 인수를 가질 수 있습니까?

나는 안 생각하지만 난 그것을 컴파일 할 때 예,이 유효이 경우에서 ,comma operator이기 때문에, 그것은 오류를 보여줍니다 및 출력 2.

+0

케이스 문에 두 가지 경우를 수행 할 수있는 방법이 있습니다. 요청하는 경우에는 쉼표가 필요하지 않습니다. –

+0

@ jerry-jeremiah 그런 식으로 뭐야, 정교하게 제발 할 수 있니? –

답변

13

을 생산하고 있습니다. C11을 인용

장 §6.5.17, 콤마 연산자 (강조 광산)

콤마 연산자의 왼쪽 피연산자 공극 표현으로 평가된다; 그 평가와 오른쪽 피연산자 사이의 시퀀스 포인트는 입니다. 그러면 오른쪽 피연산자가 계산됩니다. 결과에는 유형 및 값이 있습니다.

이 (계산하고)는 왼쪽 피연산자 버리고 오른쪽 () 한 값을 사용한다. 그래서, 위의 문장은 당신이 뭔가를 기대 1 또는 2에 전환 한 수대로 은하지 사용이 개 값을 수행, 기본적으로 그냥 정교 할

switch(2) 

과 동일합니다.

+0

이 쉼표 연산자는 어떤 경우에 유용 할 수 있습니까? 이 경우 유용하다고 생각하지 않기 때문에이 질문을 던집니다. –

+1

@DhruvaMehrotra 글쎄, 그것은 광범위한 질문입니다. 예, 아니요, 절대 알지 못합니다. 기술적으로 문제는 없습니다. 그게 전부입니다. –

+0

@DhruvaMehrotra 중복 된 질문에 유용하게 쓰일 수 있습니다. 그 중에서도 C에서는 거의 쓸모가 없습니다. C++에서는 오버로드하여 많은 사람들이 더 유용한 사례를 찾을 수 있습니다. http://stackoverflow.com/a/5602236/995714 –

관련 문제