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

Czy jest to ważne w języku c?W języku c, czy instrukcja switch może mieć 2 argumenty?

myślałem, że to nie powinno być, ale kiedy skompilowane to, to nie wykazuje błąd i produkuje 2.

+0

Istnieje sposób, aby sprawić, że wyciąg z przypadku zajdzie dwa przypadki, jeśli o to pytasz - po prostu nie z przecinkiem. –

+0

@ jerry-jeremiah, co to jest, proszę o rozwinięcie? –

Odpowiedz

13

Tak, to ważny, ponieważ w tym przypadku , jest comma operator.

Cytowanie C11 rozdział §6.5.17, przecinek operatora (nacisk kopalni)

Lewa argumentu operatora przecinek oceniano jako wyrażenie nieskuteczna; istnieje punkt sekwencji między jego oceną a punktem prawego argumentu. Następnie analizowany jest prawy argument ; wynik ma swój typ i wartość.

(ta ocenia i) odrzuca lewy argument i używa wartości prawa (bocznej) jeden. Tak więc, powyższe stwierdzenie jest w zasadzie taka sama jak

switch(2) 

Wystarczy opracować, to nie wykorzystanie dwóch wartości, jak można się spodziewać, coś, włączanie 1 lub 2.

+0

Czy ten operator przecinka może być przydatny w każdym przypadku? Po prostu pytam o to, ponieważ nie sądzę, że jest to użyteczne w tym przypadku. –

+1

@DhruvaMehrotra Cóż, to jest szerokie pytanie. To jest tak i nie, nigdy nie wiadomo. Technicznie nie ma problemu, to wszystko. –

+0

@DhruvaMehrotra można zobaczyć kilka przypadków, w których jest to przydatne w duplikacie pytania. Spośród nich rzadko jest to przydatne w C. W C++ możesz go przeciążać, tak wiele osób znajduje dla niego kilka przydatnych przypadków http://stackoverflow.com/a/5602236/995714 –