• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語のお作法 - ”{”の使い方)

C言語のお作法 - ”{”の使い方

このQ&Aのポイント
  • C言語の中で、'{ }'の使い方について疑問があります。
  • 具体的には、if文とswitch文での'{ }'の使い方の違いについて教えてください。
  • ハッシュタグ: #C言語 #制御構文 #if文 #switch文

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

とりあえず C# の話をすると, if は「1つの文を制御する」ことになっているので, 「処理1」や「処理2」が 1つの文であれば if (条件) 処理1 else 処理2 と書くこともできます. ところが, それぞれの処理が複数の文からなるときにはこのように書けない (else がどこまで影響するかわからない) ので, 「複数の文を {~} でくくると『それ全体』が 1つの文となる」という機構と組み合わせて if (条件) { 処理1-a 処理1-b } else 処理2 のように書きます. 一方 switch では「与えられた式を計算し, その結果と一致する caseラベルがあればそこへ飛ぶ」ということになっているので, case ごとに {~} を必要としません. caseラベルはあくまで「飛び先の指定」に使うだけです. ちなみに「次のcaseまでがそのcase内」というのは一応その通りですが>#3, 文法上「そのあとに零れ落ちない」ようにすることが (ECMA-334 では) 必須. C/C++ とは switch の仕様が違うことに注意.

AndYouAndI
質問者

お礼

ご回答ありがとうございます。何となくわかりました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

noname#148582
noname#148582
回答No.5

私はcase の後もブロックスコープでくくります。 分かりやすいからです。 まぁそれ以前にswitch 文は使わないようにしています。 なんでswitch 文なんて残ってるんでしょうね!

AndYouAndI
質問者

お礼

ご回答ありがとうございます。if文を使う方が良いのでしょうかね。

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

開始、終了のマークです。 if文など終了マークがなければどこまでがif内なのか解らなくなります。 case文は次のcaseまでがそのcase内なので解ります。 ちなみに"Hello Word!"からはじまるのは教科書がそうだからです。 C言語の教科書と言われる『プログラミング言語C』(カーニハンとリッチー著)の最初のコードが"hello, world"と出力するものです。

AndYouAndI
質問者

お礼

ご回答ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • jjk65536
  • ベストアンサー率59% (66/111)
回答No.2

>  ”{” はどのような意味があるのか、の説明が見つからず困っています。 もちろんそういうルールだから、なのですが、例えばifであれば{}がないと どこまでがifの適用範囲か明確に表現できません。 一方で、caseはラベルとして扱われるので、どこまでって考え方は不要です。 case 値1: case 値2: 処理 こういう書き方だってOKですし。 ですから、ifでは複数行の処理に{}が必要で、caseでは不要です。 それとは別で、{}にはスコープを制御するという重要な役割があります。 auto変数の生存範囲を限定することで、バグを減らしたりコードの見通しを 良くする効果が見込めます。 詳しくは、Wikipediaのここを見ると分かりやすいと思います。 http://ja.wikipedia.org/wiki/%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0) C#でも同じルールですので、しっかり覚えましょう。

AndYouAndI
質問者

お礼

ご回答ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • OKWavex
  • ベストアンサー率22% (1222/5383)
回答No.1

そーゆーきまりだから

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C言語について

    初心者で学校の課題をやっているときに疑問がでてきてしまったので、基本的な質問なのですが、教えて頂けたらうれしいです。 1.関数にすることによってどんな利点があるのでしょうか。 2.分岐のif文とswitch文は同じ処理をしていると考えていいのでしょうか。 3.switch文の中にfor文や、for文の中にswitch文など、条件式の中に条件式をいれることはできるのでしょうか?? 一度に3つも質問してしまってすみません。 ぜひ回答をおねがいします。

  • C/C++ ソースのコーティングについて

    最近、C/C++ ソースのコーディングに関して興味を持ちました。 そこで質問します。 皆様は普段プログラムを書くときにどんなコーディングをしていますか。 人それぞれ記述が異なると思いますが、何か自分の中でのコーディング・ルールが あれば教えて下さい。できるだけ詳しくお聞きしたいです。 ちなみに私の場合は (1)return、sizeof 演算子には必ず括弧を付けます。 (2)if、else、while、for には必ず{、}のブロックを記述して省略しません。 (3)関数を呼び出すとき、引数と引数はスペースを必ず挿入します。→strcpy( s, t );  ただし、if、while、for の条件式の中ではスペースを入れません。→while ( fgets(buff,sizeof(buff),fp) != NULL ){ … } (4)2項(3項)演算子はスペースを両端に挿入します。→ret = 2 + 3;  単項演算子はスペースは挿入しません。→i++、*str (5)ブロックのインデントは  if ( 条件式 ){   処理  }  else{   処理  } などがあります。 特に詳しく知りたいのは(5)です。 タイプ1 if ( 条件式 ){  処理 } else{  処理 } タイプ2 if ( 条件式 ){  処理 }else{  処理 } タイプ3 if ( 条件式 ) {  処理 } else {  処理 } タイプ4 if ( 条件式 )  {  処理  } else  {  処理  } それではコーディング・ルール(こだわり)などを教えて下さい。 なお、今回の質問は、より見やすいコーディングを目指しての質問です。 よろしくお願いします。

  • この(C言語)ダブルポインタのアルゴリズムを教えて!

    main(int argc, char *argv[]) while(--argc > 0) { if(**(++agv) == '-') { switch(argv[0][1]){ case 'a'; オプションaに対する処理; break; case 'b'; オプションbに対する処理; break; case 'c'; オプションcに対する処理; break; default;; abc 以外のオプションが入力された時の処理; } } else break; } オプション以外のパラメータが入力されたときの処理; 特に ’**’の部分や argv[0][1]の意味が解かりません。 よろしくお願い致します。

  • switchでの条件分岐の書き方を教えて下さい。

    こんにちは。 いつもお世話になっております。 またわからない事が出てきてしまったので、どうか ご指導よろしくお願いいたします。 簡単な検索機能をつくりたくて、思考錯誤 しております。 フォームからPOSTで受け取る変数の数は 10個あります。 それぞれの変数が ””でなければ、受け取った 変数を元に、SQL文がかわってゆく。 という事がしたいのです。 10個もあるので、たとえば 変数が$_POST["a"]から$_POST["j"]まであった時に if文を使うとすると if($_POST["a"] != "" && $_POST["b"] == "" && $_POST["c"] != "" (略)){ $stt = "検索したい予定のSQL文1"; }elseif($_POST["a"] == "" && $_POST["b"] != "" && $_POST["c"] != "" (略)){ $stt = "SQL文2"; ・ ・ ・ と言う風に、ものすごいにはなると思うのですがifを つなげていけば良いのかな、と思うのです。 PHPの基礎HPなどを検索してみると、SWITCHを 使えば、多岐に分岐するIF文を、見やすくできる、 と書いてあったので、使ってみたいのですが、書き方の 説明によると switch(変数){ case 値1:  条件を満たす時の処理1 break; case 値2:  条件を満たす時の処理2 default: } と紹介してあったのですが、今回わたしがしたい場合の 条件分岐だと、変数は一つではなく、ある変数は空でこの変数は値が何か入っていて、またもう一つの変数は 空で・・・の時は、このSQL文、というように させたい場合には、switchでどうかけばよいのか わからないのです。 それとも、こういう条件分岐の場合は、switchを 使うべきではないのでしょうか・・・? どうかご指導よろしくお願いいたします。  

    • ベストアンサー
    • PHP
  • switch の範囲指定

    switch文で以下のように書いた時に処理はCを実行するのですが、 変数a が 0~9の時に こうしますよ と範囲がまだ狭い時はこのように書いても処理はできると思いますが 変数a の範囲が 0~99だった場合、いちいちcase を100回書いて(defaultを使えば処理は減るだろうけど) と数字を100回書かないといけないのはとても面倒だと思うのです。 そこで以下のようにifを使わずにswitchを使って範囲を指定する方法はありませんか? //ifを使った場合の範囲指定 if( ( 0 <= a ) && ( a < 25 ) ){ //略 } else if( ( 25 <= a ) && ( a < 50 ) ){ //略 } else if( ( 50 <= a ) && ( a < 75 ) ){ //略 } else if( ( 75 <= a ) && ( a < 100 ) ){ //略 } //ソース int a = 6; switch( a ){   case 0: case 1:     //処理A     break;   case 2: case 3: case 4:     //処理B     break;   case 5: case 6:     //処理C     break;   case 7: case 8: case 9:     //処理D     break; }

  • C言語のswitch case文で、scanfでキーボードから読み込ん

    C言語のswitch case文で、scanfでキーボードから読み込んだ1~12の値によって画面に季節を、3~5は"春"、6~8は"夏"・・・というふうに表示させるプログラムなのですが、if文を使わずにswitch caseで作るには case 3: case 4: case 5:puts("春"); break; ・ ・ ・ と1個1個記述するしかないのでしょうか? もし比較演算子と論理演算子を使って 3<= && <=5 こんな感じに1行にまとめることができるなら教えてください。

  • C言語プログラミングについて…Arduinoを用い

    C言語プログラミングについて…Arduinoを用いて、以下の文でスイッチ「RedSwitch(赤スイッチ)」が押された回数だけ後で光るというプログラミングを作りました。次にその使用した「switch case」文を「if」文、もしくは「if else」に変換して同じプログラミングを作りなさいという課題が出て、いろいろと変えてみたのですが、シリアルモニタを見るとif文を用いた時に「RedSwitch」が押された「回数」ではなく連続的に?押した「秒数」をカウントして困ってます。どうやったら改善できるのでしょうかか?ご教授お願いしたします。 void sw_check(void) { switch(SW_RedSwitch) { case 0: if ( digitalRead(2)==SW_ON ) { SW_RedSwitch=1; } break; case 1: if ( digitalRead(2)==SW_OFF ) { SW_RedSwitch=2; } break; } } void blink(void) { digitalWrite(13,LED_ON); delay(500); digitalWrite(13,LED_OFF); delay(500); } void loop() { unsigned char SW_CNT=0,SW_TIME=0,i; while( (SW_TIME<100) || (SW_CNT==0) ) { sw_check(); if ( SW_RedSwitch==2 ) { SW_RedSwitch=0; SW_CNT++; SW_TIME=0; } SW_TIME++; delay(20); } for (i=1 ; i<=SW_CNT ; i++) { blink(); } }

  • スイッチ文の利用について

    Perl/CGIにてプログラミングを行っております。 ただいま条件分けにより処理を分けていく処理を作っているのですが、C言語でやったスイッチ文があれば便利だなと思っております。 しかし、Perlにはスイッチ文が無いようなのです。 手持ちの参考書を見ても載っておらず、諦めようかと思いましたが大量にならぶifとelsifをみてやはり思い直しました。 スイッチ文、もしくはそれに近いものってありますでしょうか? 理想としてはC言語のままの switch(式or変数){ case hoge: ... case hoge2: ... } のような形式を望んでおります。 何か有益な情報等ありましたらお知恵をお貸しください。

    • ベストアンサー
    • Perl
  • C言語 if文

    C言語のif文についての質問なのですが、ifを使い、条件Aの時は1のプログラムを実行、条件Bの時は2のプログラムを実行するようにしたとき、1と2のプログラム自体にもif文が使われています。その場合は、AとBの時のifと1と2に使われているifをどのように区別するのですか?(ちなみに1と2のif文については、それぞれ実行してみたところ動作可能でした。)説明が下手ですいません。初心者ですので、分かりやすく教えていただけると有難いです。

  • 【C言語】文字列による処理の分岐について

    いつも丁寧な解説拝見しております。 C言語について質問させて頂きます。 シリアル通信によって受信した1バイトの文字列があるとします。 この文字列のパターンよって処理の分岐をさせたい場合、コードはどのように書けば良いのでしょうか。 より具体的に申しますと、 →文字列パターン1の場合、関数1を呼び出す。 →文字列パターン2の場合、関数2を呼び出す。 →文字列パターン3の場合、関数3を呼び出す。・・・・・・ と、100パターンほどの文字列があり、それぞれにおいて異なる関数を呼び出したいと考えております。私の理解は以下に示す通りなのですが、どうも正しい処理が分らないでいます。 ・受信した文字列がどのパターンなのかを判断するために、strcmp関数で比較を行う。 ・多分岐なので、switch case文かelse if文を用いる。 この場合、条件式の中でstrcmp関数による比較を行えば良いのでしょうか。簡単にコードを示して頂ければ幸いです。C言語初心者なので理解に間違いがあるかもしれませんが、どうぞよろしくお願い致します。