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

コンピュータ・プログラミング系の話がメインのそれなりにごちゃごちゃしたネタばかり出てくるサイトです。多分。
<< Exadel Studio 3.0.5 | Top | Exadel Studio に降参して eclipse を再インストール >>
■えるC言語: 共通の処理を switch の外に書く

ふ「ということで、連載では、goto 使っちまえということで、

    switch (type) {
    case FORUM:
        fprintf(fp, "forum");
        goto common;

    case PATIO:
        fprintf(fp, "patio");
        goto common;

    case NETNEWS:
        fprintf(fp, "netnews");

    common:
        /* 共通の処理 */
        break;

    case 他の場合:
        〜省略〜

    }

こんな書き方をしました。」

U「common: というのは?」

ふ「あーこれは、単なるラベルです。goto で飛んでくるときの目印ですね、気にしないでください。簡単にいいますと、goto common; と書くと、common: という所にジャンプできるというわけです。」

U「何がなんだか分かりませんが、ダイクストラが「死んだ」と言ったというアレですね。ところで、連載時の内容には「共通処理を他関数で処理するように書き直した」と書いてありますね。他関数というのは、何をどこに出したのですか?」

ふ「common: ラベルの後のところを外に出すのですよ。

    switch (type) {
    case FORUM:
        fprintf(fp, "forum");
        common(fp);
        break;

    case PATIO:
        fprintf(fp, "patio");
        common(fp);
        break;

    case NETNEWS:
        fprintf(fp, "netnews");
        common(fp);
        break;

    case 他の場合:
        〜省略〜

    }

ふ「もちろん、common(fp) という処理が、この3つの場合以外にも呼ばれるのであれば、switch の外に出すという手もあります。微妙です。common という名前も微妙で、本来、forum_patio_netnews_common みたいな名前であるべきですが、長すぎます。」

U「あっそう。」

ふ「まあ長さはともかく、共通処理というのがどこまで共通なのか、というあたりでややこしいですね。根本的な設計を見直す、というのが正解である可能性もあります。」

U「ところで、なぜ if で書き換えられるのに、swith が必要なのか、という質問にまだ答えてもらっていませんが。」」

ふ「それはCMの後。」

(つづく)

| C言語 | 03:09 | comments(1) | -
スポンサーサイト
| - | 03:09 | - | -
コメント
素直にgoto使えっちゅーの ミ ゚ д゚ミ

あと、"swith" と脱字してるよ。
#define swith switch
[□]_ゞミ゚〜 ゚ ミ これで安心、と。
| 魚チョコ | 2005/10/22 4:18 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