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

È valido in c?In c, un'istruzione switch può avere 2 argomenti?

ho pensato che non dovrebbe essere, ma quando ho compilato esso, si vede alcun errore e produce un output 2.

+0

C'è un modo per rendere la dichiarazione del caso in due casi se questo è quello che stai chiedendo - semplicemente non con una virgola. –

+0

@ jerry-jeremiah che cosa è, per favore, puoi elaborare? –

risposta

13

Sì, questo è valida, perché in questo caso, il , è un comma operator.

Citando C11, capitolo §6.5.17, virgola operatore, (sottolineatura mia)

L'operando sinistro dell'operatore virgola viene valutata come espressione vuoto; c'è un punto di sequenza tra la sua valutazione e quella dell'operando di destra. Quindi viene valutato l'operando di destra ; il risultato ha il suo tipo e valore.

Questa (valuta e) scarta l'operando di sinistra e utilizza il valore del diritto (lato) uno. Quindi, la dichiarazione di cui sopra è fondamentalmente lo stesso come

switch(2) 

Proprio per elaborare, è non si uso due valori, come avrete aspettato qualcosa di simile, accendendo 1 o 2.

+0

Questo operatore virgola può essere utile in ogni caso? Sto solo chiedendo questo perche 'non penso sia utile in questo caso. –

+1

@DhruvaMehrotra Bene, questa è una domanda ampia. È sì e no, non si sa mai. Non c'è tecnicamente alcun problema, tutto qui. –

+0

@DhruvaMehrotra puoi vedere alcuni casi in cui è utile nella domanda duplicata. Di questi è raramente utile in C. In C++ si può sovraccaricare così tante persone trovano alcuni casi più utili per esso http://stackoverflow.com/a/5602236/995714 –

Problemi correlati