////////////////////////////////////////////////////////////////////
/*

    KAB-studio.h


    (C)KAB-studio 1999 - 2001 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com

    送信日： 2001/06/25(Mon) No.113
    配信数： 3790 ( Mag2 + Pubzine )
＊    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
＊    発行元： Pubzine ( URL: http://www.pubzine.com/  ID: 590 )
*/
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
/*              ２００１年６月２５日（月）の更新                  */
http://www.kab-studio.com/

・更新なし
　ううっ、ホットハーブを公開する勇気がない……。


////////////////////////////////////////////////////////////////////
/*                        チョー普通な日記                        */
http://www.kab-studio.com/nikki2/

2001/06/17 (Sun)
　ノワールのビデオ欲しい、でもまわりにもらえそうなとこない……。あと
は片付けとかスピーカーとかとか。テレビは田上様最高！！　もう一生着い
てきます。あと CString::Remove() のバグ。半角全角の処理が中途半端。

2001/06/18 (Mon)
　保土ヶ谷へ。しかしＰＣ来ず。だから仕様書見たり試したり。家から近い
し途中横浜に寄れるし、いいねぇ。謎の部屋チェック。ごはんはハンバー
グ。味覚センスある？

2001/06/19 (Tue)
　フレックスタイムの憂鬱。そしてまだＰＣ来ず。当面の課題が出ても作れ
ない……。ホットハーブ第３話完成！　やっと３話貯まったけど……。

2001/06/20 (Wed)
　ＰＣ来ず。家から持っていった本を読んで勉強したり。むー。会社から
まっすぐ帰ったら５時４０分に家に着いた(爆)。そして残業の話。したく
ねー(爆)。

2001/06/21 (Thu)
　やっぱＰＣ来ない。業を煮やして家でちょっと試してみたり。むー。家の
ネット環境整えたいとこにヤフーＢＢ登場。横浜ゲーマーズは他のとこのと
趣が違う……。そしてノワールサントラ。やっぱいい感じです。

2001/06/22 (Fri)
　やっとこさプログラミング開始、そしてＰＣ来る。しかしセットアップで
もごたごた……。来週から、１週間分の遅れを取り戻さないと。キーボード
持ってく？　そして有料まぐまぐと将来の夢。

2001/06/23 (Sat)
　Ｈ”代とかぐちゃぐちゃカレーとかローアングル火美ちゃんとかプログラ
ムをＲに焼いたりとか猫に身もだえしたりとか、相変わらず多忙な土曜日。
そしてネットワークアカウントとエルゴフィットキーボード。店頭に置いて
あるとこない？


////////////////////////////////////////////////////////////////////
/*                         風雅、舞い                             */
http://www.kab-studio.com/Novel/Fuga/

■　第一章　予言と運命　−６−
　外はもう紅色。四人は俊雄の教室にいた。
「帰らなくっちゃなー」
「これで五度目だよ」
　そんな風に、のんびりしたい舞だった。
「でも」
　俊雄が、深刻な顔を向けた。
「判ってるけど、ね」
　舞の苦笑いは、本当に苦々しそうだった。三人とも、声を出すことができ
なかった。
　小さな声で、本当に小さな声で、舞は、笑った。
　ひどく傾いた陽の光が、四人を照らした。長く黒い影が教室の壁にもう一
つの姿を映し出す。舞は、その影を見る。
「誰にだって直視したくない現実があるのよ。影の部分、闇の部分」
「でも」
　振り向いた俊雄の姿は逆光に照らされていた。その光は、まぶしかった。
「光も闇もあるから、いいんでしょう？」
「闇は誰だって受け入れたくない」
「でも、乗り越える手助けを、僕にはできる」
　俊雄の、笑顔。
　恭子の、信吾の笑顔。
　舞は、切なくなった。そして、苦々しく思う。
「なんかあたし、だんだん意地悪になっちゃう」
「？」
　乱暴にバッグを降ろし、開く。銀色の水筒が露わになった。それに手を掛
けて、背後の扉を睨んだ。
「今は、とことん現実と戦いたい気分かもね！！」
　教室の扉が蹴破られ、それが窓ガラスに当たって浮いた。
「な……に？」
　恭子の声は落下した扉にかき消された。四人の視線が集まる先にいる物体
は。
「犬……」
　だった。
「しかも特大のね！」
　おそらくそれは犬なのだろう。大きささえ無視すれば、犬としか言いよう
がなかった。だが、教室の中に入るにも壁を壊さなければならないほどの犬
がいるわけがない。よだれを垂らし、視線もひとつに定まっていなかった。
「……怖いッ！」
　舞にしがみつく恭子。舞の表情が曇り、それを見た俊雄が、手近な机を持
ち上げた。
「って、ちょっと待って！」
　振り返らずに、俊雄が言う。
「見せて、みせるよ」
　吠え声とも取れる大きな声を上げ、俊雄は机を両手で投げ飛ばした。松葉
杖を失いバランスを崩して倒れながらも、その相手を見ることだけはやめな
かった。机は、大きな放物線を描いて巨大な犬の鼻面に当たった。
　犬は悲痛な叫び声を上げ、のたうち回った。それは危険ではあったが、視
線を逸らすことにはなった。舞は三人をつれて教室の外へと出た。
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『もしかして、このメルマガって有料化するの！？』
「しないと思うよ。ちゃんと読んでる人がどれだけいるか……」
『そだね、有料化したら激減しそう。っつーかなんなの有料化って』
「まぐまぐで有料メルマガのサービスを始めるらしいんだよね」
『それでなのね。でもなんか始めたいっぽいじゃん』
「なんか Java 関係で思うところあるらしいよ……」
『 Java ってよく聞くけど、なんか謎』
「そういう人のためのメルマガ？」
『１００円なら読んたげでもいーけど』
「安！」
http://www.kab-studio.com/
_______________________________________________________________[KCM]


////////////////////////////////////////////////////////////////////
/*                       #pragma twice                            */
http://www.kab-studio.com/Programing/PragmaTwice/

　Version 6.13
手抜きをするな！

「演算子関係のバグ、今日は優先順位について」
『 + が先に計算されて、そのあと = ってヤツね。これ教えてもらった時、
優先順位は憶えちゃダメって言ってたよね』
「うん。たとえばこれ」

void CDebugDlg::OnButton1() 
{
    int iAry[2];
    iAry[0] = 100;
    iAry[1] = 200;
    int *pi = iAry;

    *pi++;    // ここに注目！
    TRACE( "%d\n", *pi );
    // 200
}

『ふたつ入った配列用意して、そのポインタを pi に入れてるんだよね』
「で、 *pi++ 。これ、 ++ と * 、どっちの優先順位が高いかで結果が違う
でしょ」
『 ++ の方が高いと *( pi++ ) と同じで、それだと iAry[1] と同じだから
 200 かな。 * の方が高いと ( *pi )++ 、 ( iAry[0] )++ だから 101 』
「結果は 200 、つまり ++ が先に処理されてそのあと * が実行されます」
『 *( pi++ ) なわけね。MSDN を見てもそうだね』
「で、ここで重要なのは、優先順位が * よりも ++ よりも高い、ってこと
を憶えちゃダメ！　ってこと」
『そこでそうなるわけね。でもなんで？』
「憶え間違うかもしれないから」
『憶え間違いって……』
「逆に憶えちゃうかもしんないし、思い出す時に勘違いするかもしんない
し」
『まぁそうかもしんないけど』
「だから、積極的に () を使おう！　って話」

void CDebugDlg::OnButton1() 
{
    int iAry[2];
    iAry[0] = 100;
    iAry[1] = 200;
    int *pi = iAry;

    ( *pi )++;    // ( iAry[0] )++ を望む場合。
    TRACE( "%d\n", *pi );
    // 101
}

「ってね。これなら確実でしょ」
『うん、確実』
「つまりね、 C++ の細かい仕様なんか利用しないで、見た目に分かりやす
いものを利用しましょうって話」
『ようするに、自分を信用するな、ってことでしょ？』
「極論すればね。でもこれはプログラミング界一般に言われてること」
『うん分かってるよ。 const とかそーじゃん』
「そうそう。確かに () 使うのって結構手間掛かるけど」
『 () が増えると見にくいよね……』
「ってゆーか、基本的には１行に詰め込むことが間違いかな。この例だと仕
方ないけど、たとえば」

void CDebugDlg::OnButton1() 
{
    int i1 = 100, i2 = 200;
    TRACE( "%d, %d\n", i1, i2 );
    // 100, 200
}

『前々回のだね。これは , でいっぺんに２個変数を作ってるのがまずいん
でしょ』
「そう。他にも ?: とか、あとこういうのも」

void CDebugDlg::OnButton1() 
{
    int i = 100;
    TRACE( "%d, %d\n", ++i, ++i );
    // 102, 101
}

『 TRACE の中でインクリメント。あ、これ見ると右のが先で、左のがあと
なんだね』
「この順番は開発環境によって違うから。 Visual C++ はこの順番ってだ
け」
『……具体的にゆーと、どうしてまずいん？』
「ひとつは、今の順番の問題。優先順位とか絡んで、複雑になる場合が多い
んだよね」
『 () を使えば……って、 TRACE() の中じゃ使えないか』
「そゆこと。 ?: でも使えないしね。こういうのは、１行ずつに分ければ解
決するでしょ」
『ってゆーと』

void CDebugDlg::OnButton1() 
{
    int i = 100;
    ++i;
    TRACE( "%d, ", i );
    ++i;
    TRACE( "%d\n", i );
    // 101, 102
}

「そういうこと。１行に１処理、その方が分かりやすいし。それに、コメン
トの関係もあるかな」
『コメント？』
「 // で１行まるごとコメントアウトしたとき、１行に詰め込まないほうが
無効になる処理の量が減るでしょ」
『そうすれば１機能ずつコメントアウトできる、ってことね』
「それにコンパイルエラーで行番号が出ても」
『詰め込んでるとどこがまずいのか分かりにくい、ね。確かに分かるんだけ
ど……書くのめんどいよ？』
「それはダメ！　プログラム書くのに面倒とか考えちゃダメ」
『そーゆーもん？』
「そういうもの。こういう格言があります」

今日の１秒、明日の１分。
今日の１分、明日の１秒。

『明日の１０分、じゃないの？』
「じゃないの。これは、１秒で手抜きして書いたコードは、後で問題が出た
ときに解決するのに１分掛かるけど、１分掛けてちゃんと書いたコードは、
後で問題が出ても１秒で解決する、って意味」
『最初に丁寧に書けば、後で楽ってことね』
「そもそもプログラムってそういうものだし」
『どゆこと？』
「別にさ、コンピューターの処理って人間がしなくてもいいものってあるで
しょ。計算とか」
『そりゃまぁ、そろばんでもいーんだろうけど』
「それをコンピューターで処理するって事は、今大変でも、後で楽だからで
しょ。一度プログラム作っちゃえば、それを使い回せばいいんだから」
『そういえばそうだね。ファイル検索とか、そういうもんだもんね。ってこ
とは、プログラムそのものがそういう性質なんだってこと？』
「ま、それがコンピューターのリズム、ってとこかな。それに合わせるのが
コツかも」
『コツねぇ……』
「それに、そんなに大変じゃないと思うよ」
『そなの？』
「複数行に書くときは、コピー＆ペーストすればいいんだし」
『ってゆーか、コピー＆ペーストするときって複数行の方が書きやすいよ
ね』
「だね。あと手抜きしない方がいいのは、変数関係だね」
『変数？』
「まず変数の場所。プログラムが大きくなってくると、ついついクラスのメ
ンバ変数とかにしたくなるけど、たいがい普通の変数で間に合うから」
『ってゆーかあんま大きなプログラム作ったことないかも』
「それも大事！　小さく小さく作っていけば、変数で混乱することもないか
ら、だから普通の変数で十分なわけ」
『いつも言ってる〈小さい部分の積み重ねが大きなプログラムになる〉だよ
ね』
「そういうこと。あと変数名も、横着せずにちゃんとね」
『最初に i とか付けるってヤツ？』
「それとは別の話なんだけど……これはちょっと違う話になるから、も少し
あとでまとめてするね。話を戻して、演算子関係であと関係がありそうなバ
グは、キャスト関係」
『 (int) とかね。あとこの前教えてもらった reinterpret_cast とか』
「そう。まず大事なのは、これからは (int) 形式の普通のキャストはしな
いようにすること」
『ん〜、具体的にはそれのまずさってなに？』
「まず、できちゃうことの多さ。普通のキャストは、整数値からポインタや
 const 剥がしを簡単にできちゃうでしょ」
『そういう、なんでもできちゃうってことがまずいんだ』
「そういうこと。ちょっと * を付けるか付けないかで全然違ってきちゃう
から」
『書き間違いの影響が大きい』
「そゆこと。その点」
『 static_cast reinterpret_cast const_cast dynamic_cast は機能が制限
されてるから安心』
「実際に例を見てみるとよくわかると思うよ。まずこのエラーの例」

    const int i = 10;
    const char *pch = &i;    // コンパイルエラー。

『 int のアドレスを char のポインタに、ってできないんだ』
「 int * と char * 、++ すると？」
『あ、進むバイト数が違うんだ』
「 int の中身を１バイトずつ操作したいときとかにこうするかな。これは
エラーが出るからキャストするんだけど、たとえばうっかり const のこと
を忘れちゃった場合」

    const int i = 10;
    char *pch = (char *)&i;    // const も剥がせちゃいました。

『うん、キャストできちゃってるね』
「もし reinterpret_cast を使っていたら」

    const int i = 10;
    char *pch = reinterpret_cast< char * >( &i );
    // コンパイルエラー。

『 reinterpret_cast はポインタのキャスト専用だから、 const は剥がせ
ないんだ』
「そゆこと。そしてもうひとつの重要なメリット、それは検索しやすいって
こと。たとえば今の」

    const int i = 10;
    const char *pch = reinterpret_cast< char * >( i );

「 const 付けて直した以外に違うとこあるんだけど、わかる？」
『えーっと……あ、 i の前に & が着いてない！』
「でしょう。これだと i のアドレスじゃなく中身が渡されちゃって大問題
になります」
『でもコンパイルエラーになんないね』
「だからやっかい。でもこういうことすると実行時にはエラーになるわけ」
『それがバグってことね』
「バグが出たら探すことになるけど、そのときの候補としてまず上げるの
が、こういう〈キャストしてる部分〉」
『それを探すのに reinterpret_cast が便利って事ね』
「そゆこと。普通のキャストは型名そのままだから検索しにくいんだよね。
reinterpret_cast とかなら簡単に見つかるし、それに注意する部分も絞れ
るから」
『？』
「 reinterpret_cast ならポインタ関係、 const_cast なら const 関係っ
て絞れるでしょ」
『そっか、逆に言うと reinterpret_cast なら const 関係は考えないでい
いってことね』
「そゆこと。こういう部分でまめなコードを書けば、後々楽になるってわけ
です」

/*
    Preview Next Story!
*/
『でも reinterpret_cast って長いし間違えちゃうしめんどいよ？』
「間違えたってコンパイルエラーになるだけだからいいじゃん」
『そう？　コンパイルエラーってかなり嫌なんだけど』
「大丈夫大丈夫、いつかコンパイルエラーが好きになる日が来るから」
『なんかヤダそれ』
「というわけで次回」
＜ Version 6.14 オーバーフローに要注意！ ＞
『につづく！』
「優れたプログラマーはコンパイルエラーに愛される！」
『また変な格言出てきたし……』


////////////////////////////////////////////////////////////////////
/*                ２００１年７月２日（月）の更新予定              */
http://www.kab-studio.com/

・７月表紙壁紙登場！
　毎月恒例、新しい表紙壁紙です。予定では夏って事で水着＜ベタすぎ。
もしかしたら、メインイラストは縦置きで、それをトリミングした壁紙を別
に用意する形になるかも。まーその前に完成させないと……。これまでの表
紙壁紙は CG Gallery でダウンロードできます。
[CG Gallery]
http://www.kab-studio.com/CG/Gallery/


////////////////////////////////////////////////////////////////////
/*                          ご注意！！                            */

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
http://www.kab-studio.com/nikki2/
・購読登録を解除したいときにはこのページで行なってください。
＊http://www.mag2.com/m/0000012198.htm
＊http://www.pubzine.com/detail.asp?id=000590
・解除は自分で行なってください。
・バックナンバーはこれらのページにあります。
http://backno.mag2.com/reader/Back?id=0000012198
http://www.kab-studio.com/Freeware/index.html#MailMagazine


////////////////////////////////////////////////////////////////////
/*
    KAB-studio.h
      Weekly Mail Magazine.
      Written by Kaburaya Seiden.
      http://www.kab-studio.com/Info/MailMagazine/

    (C)KAB-studio 1999 - 2001 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com
*/
////////////////////////////////////////////////////////////////////




