
/*
    KAB-studio.h
        　ＫＡＢ−ｓｔｕｄｉｏで先週更新した内容
        が格納されたヘッダーファイルです（笑）。

    (C)KAB-studio ALL RIGHTS RESERVED.
        http://www2.justnet.ne.jp/~kabstudio/
        kab-studio@multimedia.design.co.jp

    送信日： 1999/07/26(Mon) No.017
    配信数： 2410（ Mag2 + Pubzine ）
    発行元： まぐまぐ( URL: http://www.mag2.com/  ID: 0000012198 )
    発行元： Pubzine( URL: http://www.pubzine.com/  ID: 590 )
*/

/*            １９９９年７月２６日（月）の更新                */

・更新ナシ（爆）。
　更新ナシでーす。なんと、プログラミング辞書に単語がひとつも送られて
いないのでこれも更新してないとゆー。ま、こういう週があってもいいよね。


/*                    チョー普通な日記                        */

１９９９年７月１８日（日）：
　出島優勝！　その強さを今、熱く語る！　それと常連さんからのツッコミ。

１９９９年７月１９日（月）：
　常連さんからのツッコミ、そして思い出すだけで恥ずかしい想い出のひと
つをここに披露！

１９９９年７月２０日（火）：
　さらに常連さんからのツッコミ。それにしても皆さん働いてて、うらやま
しいよーなうらやましくないような……。

１９９９年７月２１日（水）：
　とどめに常連さんからのツッコミはコーディング規則について。そして苦
戦する試験。ってゆーかもっと前から勉強しとけって感じ。

１９９９年７月２２日（木）：
　今日はツッコミなし（泣）。取るつもりのテストがヤバイ。myShade と軍
手購入。そして iBook 登場！！

１９９９年７月２３日（金）：
　myShade 使い始めや来月の表紙の予定変更の話などなど。いつもの金曜に
比べてアニメの話が少ない（爆）。

１９９９年７月２４日（土）：
　オールスター第一戦！　松坂と上原とイチロー。



/*                        金菜さんの憂鬱                        */


１９９９年７月１８日（日）：
お便り
２バイト単位でファイルから読み込みたい
CFile::Read() と２バイトの配列
サンプルコード

１９９９年７月１９日（月）：
デバッグについて
ソースファイルデバッグとその設定
お便り
今開いてるファイルだと CDocument::OnOpenDocument() が呼び出されない
CSingleDocTemplate の派生クラスで MatchDocType() をオーバーライド
サンプルコード
正攻法じゃない方
CWinApp::OpenDocumentFile() をオーバーライド
同じファイルを開くときは一度ダミーのファイルを開くようにする

１９９９年７月２０日（火）：
デバッグについて
ブレークポイントをセット
紙の右に下向き矢印
中カッコに入る
お便り

１９９９年７月２１日（水）：
お便り
ダイアログとメニューとチェックマーク
CTestCmdUI が渡される
仮想関数とポリモーフィズム
SetMenuItemInfo() を使う

１９９９年７月２２日（木）：
デバッグについて
サンプルコード
変数の中身を見る
ウオッチ
変数
レジスタ
お便り

１９９９年７月２３日（金）：
デバッグについて
メモリ
コールスタック
混合モード

１９９９年７月２４日（土）：
デバッグについて
できるだけデバッグをしなくて済む状況にすることが大切
ランタイムエラーをコンパイルタイムエラーに置き換えるとか
デバッグのしやすいプログラムを組む
管理と保守がしやすいプログラムを組むとか
テストは徹底的に
デバッグをするときの注意
ソースコードをむやみに書き換えないこと
手当たり次第にかつよく考えて
明日からはＳＴＬ



/*                        #pragma twice                        */


　Version 2.6
便利なものいろいろ！

「前回は while を使ってみました」
『あれは便利よねー、面倒な繰り返しが簡単にできちゃうんだから』
「今回まず、そのための便利なものを紹介しましょー」
『便利づくしねー』
「まず＜っていう演算子を紹介しましょう」
『だいなり、ってヤツ？』
「そ。とりあえずこれ試してみ？」

void CCalcDlg::OnBEqual() 
{
    TRACE( "3 < 5 : %d\n", 3 < 5 );
    TRACE( "5 < 3 : %d\n", 5 < 3 );
}

『はーい。ビルドして実行っと……』

3 < 5 : 1
5 < 3 : 0

『？　変な結果』
「３と５でどっちが大きい？」
『そりゃ５に決まってるじゃない』
「じゃ、３＜５は合ってる？」
『合ってるに決まってるじゃない』
「それじゃ５＜３は？」
『これは間違いよね』
「そういうこと」
『どーゆーこと？』
「よーするに合ってたら１になって、間違ってたらゼロになるってこと」
『１になるとか、ゼロになるとかって？』
「こういうことかな」

void CCalcDlg::OnBEqual() 
{
    TRACE( "3 < 5 : %d\n", 1 );
    TRACE( "5 < 3 : %d\n", 0 );
}

「 3 < 5 っていうのがあったら、プログラムはこれを調べて、合ってたら
１になって、間違ってたらゼロに置き換わるってこと」
『置き換わるってよく分かんないけど……』
「ほら、この前こういうの見たでしょ」

    iBox = iBox + 200;

『前々回だっけ』
「このときは、まず」

    iBox = 100 + 200;

「に置き換えるって話したでしょ。こういうふうに置き換わるってこと」
『置き換わるっていうより、みなす、ってこと？』
「そういうことかな。＜があったら、その左右を比べて、合ってたら１に、
間違ってたら０になっちゃうわけ」
『ふーん……』
「じゃ、問題」
『ええ？』
「これ使って前回の 1 から 5 までっていうの、やってみ？」
『う”、難しそう……』
「この前の〈ずっと繰り返される〉っていうの、こうだったよね」

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 0;
    while( 1 )
    {
        iBox += 1;
        TRACE( "%d ", iBox );
    }
}

「 TRACE() で５を出力した、で while に戻った。そのとき while がゼロ
になるようにすればいいんだから？」
『これで < を使うのよね…… iBox < 5 とかできる？』
「もちろん」
『ってことは、 iBox の中が０から４の時は 4 < 5 で、これだと１になる
から while の次は中カッコの中』
「うんうん」
『もし iBox の中に５が入ってたら、 5 < 5 だから、これ間違いだから、
これがゼロになって…… while がゼロになる！　これでストップ！』
「そういうこと！　じゃ、実際に書いてみると？」
『 1 を iBox < 5 に置き換えればいいだけよね……』

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 0;
    while( iBox < 5 )
    {
        iBox += 1;
        TRACE( "%d ", iBox );
    }
}

『書き換えてビルドして実行して……やったー！　ちゃんと５回で止まっ
たよ！』
「こういう演算子と、 while を組み合わせるだけで色々できるってことが
分かった？」
『うん、便利だねーこれ』
「じゃ、これに似た演算子も紹介しようか」
『似たって、> とかってこと？』
「そ。> は < の逆」
『ってことは 3 > 5 でゼロ、ってことね』
「次に <= と >= 。これはつまり、現実世界だと……」
＜　　　＞
＝　と　＝
「のことだね」
『 5 < 5 だとゼロだったけど、 5 <= 5 だと１、ってことよね』
「そういうこと」
『ねーねー、ただの＝ってないの？　代入の記号でいいの？』
「違うんだね、これが。〈同じかどうか〉の演算子は、＝＝を使うんだわ」
『イコール、ふたつ？』
「そ。ま、これは憶えちゃうしかないかな」
『変数に入れるのは＝、ホントの意味の〈同じ〉っていうのが＝＝、ね』
「あと！＝っていうのもあるよ」
『なに、これ』
「＝＝の逆。 5 == 5 なら１だけど、 5 != 5 だとゼロなんだわ」
『ってことは 3 == 5 ならゼロだけど、 3 != 5 だと１ってこと？』
「そういうこと。もうひとつこれに似たの、それは！」
『それは？』
「いや、そーじゃなくって、〈 ! 〉っていう演算子なんだわ」
『あー、！＝の！ね』
「そ。これは、ゼロのものを１にして、ゼロ以外のものをゼロにします」
『ん？』
「たとえばこれ」

void CCalcDlg::OnBEqual() 
{
    TRACE( "3 < 5 : %d\n", !( 3 < 5 ) );
    TRACE( "5 < 3 : %d\n", !( 5 < 3 ) );
}

『これ、今日最初のヤツよね。ビルドして実行っと……あ！　逆！』

3 < 5 : 0
5 < 3 : 1

「こんなふうに〈逆にする〉ことができるから、これを使えば < とかも逆
のができるってことだね」
『……なんか頭こんがらがっちゃいそう』
「それは言えるね。だからね、自分なりにひとつの型を作っとくといいかな」
『どういうこと？』
「たとえば、さっきのプログラムはこう書き換えられるでしょ」

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 0;
    while( iBox != 5 )
    {
        iBox += 1;
        TRACE( "%d ", iBox );
    }
}

『あ、そうよね、iBox の中が 5 になったときに、 while がゼロになれば
いいんだから』
「同じく」

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 0;
    while( !( iBox == 5 ) )
    {
        iBox += 1;
        TRACE( "%d ", iBox );
    }
}

『よーするに、！＝は！と＝＝に置き換えられるってことよね』
「あとこういうのもあるよ？」

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 0;
    while( iBox <= 4 )
    {
        iBox += 1;
        TRACE( "%d ", iBox );
    }
}

『これも、５になったらゼロになるんだ……』
「さ・ら・に」

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 0;
    while( !( 5 <= iBox ) )
    {
        iBox += 1;
        TRACE( "%d ", iBox );
    }
}

『もう、もうやめてっっ！！　頭が、頭が』
「悪い？」
『悪くないっ！　でもホントに悪くなっちゃいそ……』
「だから、自分で使うときにはひとつに統一した方が分かりやすくなると思
うよ」
『統一って、 < だったら < ばっか使うってこと？』
「全部にってわけじゃないけど、たとえばこの〈５まで〉とかならね」
『ま、言われなくてもするけどね』
「そう？」
『何よ、どういう意味よ』
「実際に統一してくのは難しい、ってこと。ま、そのうち分かるけどね」
『なんかムカツクなー』
「あともうちょっといいかな」
『うん、今日これまでって、 <, >, <=, >=, ==, !=, ! しか教えてもらっ
てないし、どれも似たようなのだし』
「そだね。でもさ、！ってちょっと違ったでしょ」
『そういえば…… < とかって、左と右を比べるのでしょ。でも！って右だ
けだよね』
「この！みたいな、ひとつの数字だけやひとつの変数だけをチェックする演
算子を〈単項演算子〉って言います」
『たんこーってゆーと、酸素含有率アップでどかーんって』
「そりゃ炭坑や！　〈項〉っていうのは……」
『どったの？』
「……よーするに〈 項 == 項 〉とか〈 !項 〉とか見れるわけで……」
『しっかりやんなさいよー、センセなんでしょー！？』
「う”……要するに〈チェック項目〉の〈項〉かな。＝＝だったら左と右が
チェックする項目で、！だったら右側だけがチェックする項目」
『この項目がいっこだけだから、単項演算子、ってこと？』
「そゆこと。他の＝＝とかは２項演算子っていいます」
『よーするに種類としてそういうのがあるってことよね』
「そうだけど、本とかにこういう用語が使われてるから、知っておくと便利
だから。ちなみに〈項〉は英語で言うと "operand"（オペランド）って言う
から」
『なんか猟奇的な世界ね』
「いきなりボケ激しいっすね……ちなみに "operand" って〈被演算子〉っ
て意味らしいよ」
『まんまねー』
「で、今日最後は４つの単項演算子を憶えてもらいたいと思います」
『４つも！？』
「大丈夫、そんなに難しくないから。これ試してみて」

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 0;
    while( iBox < 5 )
    {
        ++iBox;
        TRACE( "%d ", iBox );
    }
}

『あ、結果同じー』
「 ++ っていう単項演算子は、くっついてる変数を１増やす、っていう機能
を持ってるわけ。つまり iBox += 1; と同じってことだね」
『へー、これ便利そう。ってことは -- もあるってこと？』
「そういうこと。で、実はこんなのもあります」

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 0;
    while( !( 5 <= iBox ) )
    {
        iBox++;
        TRACE( "%d ", iBox );
    }
}

『あ、今度は後ろに付いてる……あれ？　でも結果同じだよ？』
「というわけで、次回に続く！」


/*
    Preview Next Story!
*/
『今日は結局、演算子見ただけね』
「こーゆーのが大事ってことかな。次回はちょっと違う話」
『どんな話かな……な、何これ！』
「まぁ、たまにはこういうことも、あるよね……」
『というわけで次回』
＜ Version 2.7 短いことはいいことだ？ ＞
「につづく！！」
『次の話、ええ話や……』
「まあそうかも」
『でもムカツク！』
「げげ」


/*            １９９９年８月２日（月）の更新予定                */

・表紙を８月バージョンに！
　ってまだ原画もできてない（汗）。たぶん掲載できると思うけど……でき
なかったらゴメンね（爆）。


/*                        ご注意！！                            */
/*

　このメールマガジンをそのまま「返信」すると、作者のメールアドレス
（kab-studio@multimedia.design.co.jp）へと転送される仕組みになってい
ます。「まぐまぐ」もしくは「Ｐｕｂｚｉｎｅ」の管理者へメールを送りた
い場合には、直接そちらへメールを送ってください。

*/
/*

　このメールマガジンの購読登録を解除する場合には

http://www2.justnet.ne.jp/~kabstudio/Info/MailMagazine/

　が便利です。また、購読解除についての詳しい情報は、
登録時に送られてきた「まぐまぐ」もしくは「Ｐｕｂｚｉｎｅ」からの
メールをお読みください。

*/
/*

　本誌のバックナンバーはＫＡＢ−ｓｔｕｄｉｏにはありません。
　まぐまぐの

http://bigbeat.tegami.com/~mgsearch/frame.cgi?id=0000012198

　にありますのでそちらをどうぞ。

*/
/*
    KAB-studio.h
    Weekly Mail Magazine.
    Written by Kaburaya Seiden.

    (C)KAB-studio ALL RIGHTS RESERVED.
        http://www2.justnet.ne.jp/~kabstudio/
        kab-studio@multimedia.design.co.jp
*/


/*                    See you next week!!                        */


