2016-06-13 26 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

ケースステートメントに2つのケースを実行する方法がありますが、これはコンマではなく、あなたが求めているものです。 –

+0

@ jerry-jeremiahどういう意味ですか、詳細を教えてください。 –

答えて

13

を生成はい、これは、有効です。 C11を引用

、章§6.5.17、コンマオペレータ、(強調鉱山

コンマ演算子の左オペランドは、ボイド式として評価されます。その評価と右オペランドとの間には、 シーケンスポイントがあります。 次に、右の オペランドが評価されます。結果は型と値を持ちます。

この(評価すると)、左オペランドを破棄し、右()1の値を使用します。したがって、上記の文は、のようなものを期待のいずれか1または2に切り替えた可能性として、それはは、ない使用二つの値を行い、基本的には手の込んだ

switch(2) 

と同じです。

+0

このカンマ演算子はどんな場合でも役に立ちますか? この場合、私はそれが有用であるとは思わないので、私はちょうどこれを求めています。 –

+1

@DhruvaMehrotraまあ、それは広い質問です。はい、いいえ、分かりません。技術的に問題はありません。それだけです。 –

+0

@DhruvaMehrotraあなたは重複した質問に役立ついくつかのケースを見ることができます。それらの中ではC言語ではほとんど役に立ちません.C++ではそれをオーバーロードすることができますので、多くの人がそれをもっと便利なものにすることができますhttp://stackoverflow.com/a/5602236/995714 –

関連する問題