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

Ist dies in c gültig?Kann eine switch-Anweisung in c 2 Argumente haben?

Ich dachte, es sollte nicht sein, aber wenn ich es kompiliert wird, zeigt es keine Fehler und Ausgang 2.

+0

Es gibt eine Möglichkeit, die Case-Anweisung zwei Fälle zu machen, wenn Sie das fragen - nur nicht mit einem Komma. –

+0

@ Jerry-Jeremiah was ist so, können Sie bitte erarbeiten? –

Antwort

13

Ja produziert, diese gültig ist, weil in diesem Fall die , ein comma operator ist.

Zitiert C11, Kapitel §6.5.17, Kommaoperator, (emphasis Mine)

Der linke Operand eines Komma-Operator wird als ungültig Ausdruck ausgewertet; Es gibt einen Sequenzpunkt zwischen seiner Auswertung und dem des rechten Operanden. Dann wird der rechte Operand ausgewertet; Das Ergebnis hat seinen Typ und Wert.

Diese (auswertet und) verwirft den linken Operanden und verwendet den Wert der rechten Seite (Seite ) ein. So ist die obige Aussage im Grunde die gleiche wie

switch(2) 

einfach zu erarbeiten, es nicht Verwendung zwei Werte, wie man so etwas erwarten kann, das Einschalten entweder 1 oder 2.

+0

Kann dieser Komma-Operator in jedem Fall nützlich sein? Ich frage nur, weil ich nicht denke, dass es in diesem Fall nützlich ist. –

+1

@DhruvaMehrotra Nun, das ist eine breite Frage. Es ist ja und nein, man weiß es nie. Es gibt technisch kein Problem, das ist alles. –

+0

@DhruvaMehrotra Sie können einige Fälle sehen, in denen es in der doppelten Frage nützlich ist. Von diesen ist es in C nur selten nützlich. In C++ können Sie es überladen, damit viele Leute ein paar nützliche Fälle dafür finden. Http://StackOverflow.com/a/5602236/995714 –