裏表(Phinloda のもう裏だか表だか分からないページ)

コンピュータ・プログラミング系の話がメインのそれなりにごちゃごちゃしたネタばかり出てくるサイトです。多分。
<< ■えるC言語: switch 文 | Top | cygwin の gnu tar で --exclude-from >>
■えるC言語: case と default

ふ「switch 文の動作はちと面白いように思います。例えば、こういう書き方をしても、C言語としては別に問題ありません。

    switch (i) {
    case 0:
        foo();

    case 1:
        bar();

    default:
        printf("do nothing¥n");
    }

U「これは?」

ふ「このように書くと、i の値が 0 なら、foo(); を実行する、というところまでは先ほどの例と同じですが、続けて bar(); も実行して、さらに do nothing と画面に表示していきます。」

U「i の値は、どこから処理を始めるかということを決めるだけであって、break がなければ、そこから switch 文の最後まで全部実行するのですね。」

ふ「そういうことです。if を使って書いた、次のような基本的な処理の流れの場合、

    if (i == 0) {
        foo();
    } else {
        bar();
    }

 これを switch を使って書くと、次のようになります。

    switch (i) {
    case 0:
        foo();
        break;

    default:
        bar();
        break;
    }

U「ところで、default というのは何と読むのですか?」

ふ「デフォルトと読みます。switch 文の場合、どの case にも該当しない場合に、そこから処理を始めるという意味を持ちます。」

U「case というのは?」

ふ「ケースです。普通に英語で「場合」という意味ですが、日本語でもケースといいますね。ちなみに、switch の直後の () の中で指定された変数が case に続く値と一致していたら、そこから処理を始めることになります。」

U「さきほどの例を比べると、if を使った方が圧倒的に分かりやすいような気がしますが、なぜ switch 文が必要なのでしょうか?」

(つづく)

| C言語 | 02:44 | comments(2) | -
スポンサーサイト
| - | 02:44 | - | -
コメント
 このあたりの話には「フィンローダのあっぱれご意見番「第41回:暗黒面の技」」が参考になりました/なると思いますが、入門向きではないかも。

 ☆

switch(condx_key) {
label: func_other();
default: func_default(); break;
case 1: func_1(); break;
/* 省略 */
}

というコードで、condx_keyにdefaultに分岐する値を与えてswitch文から実行したらfunc_otherを実行した、というコードを吐いたコンパイラがありました。
 defaultが、記述上の第1分岐条件だとそうなる、というコンパイラ■え。

 ☆

>> ・・・なぜ switch 文が必要なのでしょうか?」

 なくても困らないけど、や^hあったら便利な場面があるわ。
| の゛ | 2005/10/09 9:17 PM |
インデントが、なインでんと(古典)(悲)
| の゛ | 2005/10/09 9:23 PM |
コメントする









Powered by "JUGEM"
▲このページの先頭へ
CALENDAR
S M T W T F S
    123
45678910
11121314151617
18192021222324
252627282930 
<< June 2017 >>
NEW ENTRIES
CATEGORIES
ARCHIVES
NEW COMMENTS
NEW TRACKBACKS
LINKS
PROFILE