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

    KAB-studio.h


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

    送信日： 2001/07/30(Mon) No.118
    配信数： 3780 ( 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/07/22 (Sun)
　ホットハーブの彩色したりぷらとわ書いたり、しかしそれ以上に音楽した
い感が。歴史的に音楽が一番なんで。そして北条時宗最終回＜違う。
時輔〜(泣)。

2001/07/23 (Mon)
　初客先！　いやー自分の作ったのが実働するってのはいいですねー。新鮮
なものを色々見せてもらったし。でも残業(泣)。ホットハーブの人気はまあ
まあ？

2001/07/24 (Tue)
　今日は暑かった……。プログラミングじゃないお仕事開始。ごはんはポー
クステーキ味噌豆板醤味。刃牙新シリーズは……。肩痛い。でも凝ってるわ
けじゃないのよ。

2001/07/25 (Wed)
　エクセル使って、客先に飛んで、雷雨になって、帰りに面談。なんか色々
あるね。今月の出費、ちょっと多い……。

2001/07/26 (Thu)
　エクセルで作ってたのはほぼ完成。プログラミングじゃないけど結構楽し
い？　ノートパソコンまた欲しがる。 MSVCP50.dll の恐怖……。 PC ブ
ラッシュアップするも効果なく。むー。

2001/07/27 (Fri)
　お仕事はエクセルの、まとめ。ごはんはカレー。実家と電話。それだけ。

2001/07/28 (Sat)
　ぶらりと横浜に行ってＡ４サイズのタブレットを買ってしまう(汗)。でも
いいですよー。ごはんはスパゲッティ。そしてホットハーブの感想。そう
だったのか……。


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

■　第一章　予言と運命　−１１−

　部屋の中央にでんと構えるオブジェクトは、よほどのことがない限り動き
出せそうには見えなかった。犬を包み込む氷は白く霜がかかっていて、その
姿ははっきりとは見えない。
「終わったみたい……ね。あ！」
　見れば、雅樹の頬にわずかな傷があった。
「もしかして当てちゃった！？」
「いや、違うだろ。それに、こんなもの傷のうちに入らないし」
　血を拭いたあとの傷跡が、見る間に消える。
「火の能力で、傷を……？」
「いんや、俺は不老不死なんだよ」
「不老不死ぃ？」
「あ、そこ笑うとこじゃないぞ！　で、こいつはどうすんだ？」
　とりあえず一段落ついて、二人はそのオブジェを見ていたが、この犬をこ
れからどうしたらいいのか考えあぐねていたし、さらにこの部屋はかなり寒
かった。
「……そんなに暇でいられるわけじゃなさそうだな」
　雅樹は一歩前に出て、舞の前に立ち、右腕を掲げる。
『蒼炎焦焼！！』
　その右腕を蒼い炎が走った。目の前に立っている雅樹が気に入らないが、
その気迫は舞の自由を奪っていた。
「どうしたの？」
「いる」
　雅樹は調理実習室のドアを睨み付けていた。
　唐突にそのドアが真っ二つに割れ、宙に飛んだ。犬が吹っ飛ばしたときと
違うのは、その二つに別れたドアが慣性の法則に逆らって止まり、さらに宙
に浮き、方向転換し、割れてささくれ立った所を二人に向けてから、再び加
速を始めたことだった。
『水槍よ貫け！！』
『焦炎槍射！！』
　蒼と紅、二つの槍が同時に二つのドアを破壊した。
「ま、こんなもんでしょ」
　二人は親指を立てた。
　パン、パン、パン、パン――その生意気そうな拍手を聴いたとき、舞はそ
の姿をほぼ確信していた。
「あの、少年」
　登校時に現れた、あの少年だった。服装は全く違い、全てが白のスーツと
いうおよそ子供らしくない姿だった。
「誰なんだ、あいつ」
「あの子、今日……」
　と言いかけて見れば、雅樹は反対側を向いて話を聞いていた。肘。
「はうっ！！」
「……あの子、力使えるわよ、きっと」
「なんなんだよいったい……」
「仲がいいんだね、二人とも」
　その言葉に二人は再び戦闘態勢を取る。
「何者だ、お前は」
「まあ待ってよ。物事には順序っていうものがあるんだから」
　余裕しゃくしゃくで、少年は一歩一歩進み、氷のオブジェの隣に立った。
その表面を指で撫でれば、白いベールの中の苦痛に満ちた顔が露わになっ
た。氷の表面に少年の顔が写る。
「ま、こんなもんかな」
　か細い少女のような人差し指が、水色のグラデーションに当てられてい
た。何かを、呟く。表面に、ひびが入った。
　全ての氷が砕け散った。部屋中白い氷破砕片が飛び散った。
『ちっ！！』
　雅樹の蒼い炎が二人を包み、細かい氷の粒を遮った。
「散らばるぞ！！」
「う、うんっ」
　炎が飛び散ると同時に雅樹は右に舞は左に跳び退く。そして、二人は構え
た。
「……えっ！？」
　霜はほとんど消えて、視界はすでに晴れていた。真っ白になった教室の黒
板の前に立っているのは、その少年だけだった。
　その少年の足下に、水たまりの下に溜まる真っ赤な液体と、奇妙な色に変
色したゼリー状の塊と薄茶色と白の毛の束が氷の塊と共に見えた。
「！！……」
　舞は口を押さえた。雅樹は表情を変えていなかったが、自然と眉間にしわ
が寄っていた。
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『ホットハーブ、結構人気あるんじゃない？』
「さい先はいいみたいだね」
『あたしのコミックス化も近いかも？』
「あ、こんなところにプロットが……」
『へ？』
「タイトル〈カミサマ〉、主人公……火美ちゃん」
『ホントにマンガになる予定あるんだ……』
「僕と金菜先輩も出るみたい」
『あーやっぱりー』
「何その嫌そうな言い方」
『べつにー。で、ジャンルは？』
「剣と魔法のファンタジー……」
『今の対極って感じね……魔法でプログラムが作れれば！』
「そんなこと言わないでちゃんと勉強しようね……」
http://www.kab-studio.com/
_______________________________________________________________[KCM]


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

　Version 6.18
デバッグビルドとリリースビルド再び

「さて今回は、デバッグする上で重要なことのひとつ、デバッグビルドとリ
リースビルドってものについて解説します」
『って、前にそれ教えてもらったよ？』
「 Ver 3.24 ( No.049 ) 」だね。でもちょっとだけだったでしょ」
『最後の４分の１だけ……』
「というわけで、もう少し突っ込んで見てみましょう。もちろんデバッグに
も関係あるしね」
『そりゃデバッグモードってゆーんだもんね。でも具体的にゆーと？』
「まず、一番重要なのは ASSERT() や TRACE() かな。っと、まず #ifdef 
とか思い出して」
『 Ver 6.06 ( No.106 ) とか Ver 6.07 ( No.107 ) だね』
「そのとき＜条件コンパイル＞ってやったでしょ。実は ASSERT() や 
TRACE() にはこの条件コンパイルが大きく関わってくるんです」
『何を #define するかでプログラムが変わってくるってヤツね。 ASSERT()
とかが変わる？』
「変わるんです。と、その前にちょっと復習」

void CDebugDlg::OnButton1() 
{
    int i = 100;
    CString cStr;
    cStr.Format( "%d", i );
    MessageBox( cStr );
    // 100
}

『えーっと、確か CString::Format() って TRACE() みたく、数字を 
CString に入れてくれるんだよね』
「そう。最後はダイアログとしてそれを表示」
『うん、 100 って出た。でもなんで TRACE() 使わないの？』
「それがミソ。でもその前に、 ASSERT() の方。今度はこれ試して」

void CDebugDlg::OnButton1() 
{
    int i = 100;
    ASSERT( ++i );
    CString cStr;
    cStr.Format( "%d", i );
    MessageBox( cStr );
    // 101
}

『さっきのと違うとこ…… ASERT() で i を 1 増やしてるね。でもそれだ
けだし結果も当たり前の 101 ……』
「うん、これはその確認。じゃ、今度はリリースビルドで試してみましょ
う。やり方憶えてる？」
『教えてもらった？』
「えーっと……あ、 Ver 3.24 ( No.049 ) で」
『ホントだ。えっと、【ビルド】−【アクティブな構成の設定】、んで
Release 、でいいんだよね』
「そうそう。それでビルドして実行してみて」
『ほいビルド……そういえば、なんでこれ、時間掛かるの？　デバッグの時
も、最初にビルドした時って時間掛かるし』
「普段時間掛からないのは、前にビルドした時から変更されたとこだけビル
ドするから」
『あ、だから２度目からは時間掛からないんだ』
「大きく書き変えたりしたら、やっぱり全部ビルドし直して時間かかるよ」
『へー。あ、終わった。んで実行。あ』
「〈デバッグ情報がありません〉ダイアログは無視していいよ」
『ほい。と、さっきみたく普通にボタン押して……あ！　 100 だ、ダイア
ログに 100 ってなってる！』
「そう、増えてないでしょ。つまりリリースビルドだと」

    ASSERT( ++i );

「の１行が丸ごとなくなっちゃうわけ」
『なんてこったい……』
「これが、前回言った〈リリースビルドだと ASSERT() が働かない〉ってこ
と」
『へぇ……あ、ちょっと試していい？』
「もちろん」

void CDebugDlg::OnButton1() 
{
    ASSERT( 0 );
}

『うわー、リリースビルドだと止まらないしダイアログも出ない……』
「でしょう。じゃ、なんでそうなるか見てみましょう。 MFC のインクルー
ドファイルの中に Afx.h ってファイルがあるから、その中から ASSERT() 
を探して」
『あ、結構上の方にあった……けど、ふたつあるよ、どっちが本物？』
「両方とも本物。上から見てくと……」

// Afx.h

#ifdef _DEBUG
// 略。

#define ASSERT(f) \
// 略。

#else   // _DEBUG

#define ASSERT(f)          ((void)0)
// 略。

#endif // !_DEBUG

『？？……あ！　そっか、これが条件コンパイルのとこなんだ』
「そゆこと。 _DEBUG が #define されてると上の ASSERT() 」
『そうじゃない時は下の ASSERT() 。って、上はなんか色々入ってるのに、
下はなんかすんごくちょっとなんですけど』
「っていうか、つまり ASSERT(f) が ((void)0) になるわけでしょ？　
ASSERT(f) の f は？」
『ないね……そっか、これが ++i が消えちゃう原因？』
「そゆこと！　つまり ASSERT() が中身もまるごと ((void)0) になっちゃ
うってこと」
『……ねー』

void CDebugDlg::OnButton1() 
{
    ((void)0);
}

『ってなんか変だけど。ただの空白ってダメなの？』
「そうだねー、もし ASSERT() が空白になると」

    CString cStr ASSERT( 0 );

「ってできちゃうんだよね」
『うわ変……』
「だから空白じゃなくて 0 にして、でもそれだけだと」

    int i = ASSERT( 0 );

『うわまた変……』
「で、代入できないように void にキャストするわけ」
『 void って、関数の戻り値ないときのだよね』
「そう、だから何にも代入できないわけ」
『……んー、まとめると、ようするに変なことできないようにってこと？』
「そういうこと。まぁちょっとしたテクニックみたいなものだけどね」
『なんかちょっと奥が深いかもしんない……。って話を戻して、つまり
_DEBUG ってのが #define されてるかどうかなんだよね』
「そうそう。実はそれ、もう見てるんだよ」
『見てる？』
「 Ver 6.07 ( No.107 ) 見て」
『あ、【プロジェクトの設定】で #define されてるんだ！』
「で、それされてるのがデバッグビルドの方。リリースビルドだと」
『ないね。そうなると ASSERT() まるごと消えちゃうんだ』
「そういうこと。たとえばリリースビルドで _DEBUG, を加えると」
『おおっ、今度はちゃんと 101 になった！』
「ちなみにデバッグモードで _DEBUG, を取り除くと」
『おおっ、 101 ……ってさっきと変わらないやん』
「ちょっと複雑な話になるけど、【プロジェクトの設定】の
【C/C++】−【コード生成】ページの【使用するランタイム ライブラリ】で
(デバッグ)って付いてるのを選んでると、無理矢理 _DEBUG が #define さ
れちゃうから。だからこれを【マルチスレッド(デバッグ)】にすると」
『お、今度はちゃんと 100 になった。こうすれば ASSERT() がなくなっ
ちゃうわけね』
「ちなみになくならないのもあるよ。さっきの ASSERT() とかがあったとこ
に VERIFY() ってあるでしょ」
『うんある。あ、これは ((void)(f)) に置き換わるね。 f があるから、
こっちは ++i がなくなんないんだ』
「だから、 ASSERT() の中が消えてほしくない場合は VERIFY() を使うって
手もあるかな。でも」
『でも？』
「僕はあんまり使わないかなぁ。 ASSERT() と VERIFY() をごちゃごちゃに
するのはね。別に無理矢理中に消えて欲しくないコード書くこともないし」
『前に、１行に詰め込まない方がいいって言ってたもんね』
「ま、便利な面もあるから使うのも悪くないけど。たとえば関数の戻り値を
ASSERT() でチェックしたい時とか」
『そっか、そういうとき２行にすると、戻り値を入れる変数作んなきゃいけ
ないんだね』
「その辺は人それぞれ、かな。あとこの系統の最後に TRACE() 」
『いつものおなじみの TRACE() も、デバッグの時はなくなっちゃうんだ』
「ただ重要なのは、 TRACE() はなくなっちゃうけど、アウトプットウィン
ドウに出力する機能がなくなっちゃうわけじゃないってこと」
『どゆこと？』
「実は TRACE() は、 API の OutputDebugString() の機能を使ってるんで
す。だから」

void CDebugDlg::OnButton1() 
{
    OutputDebugString( "あうとぷっと\n" );
}

『うりゃ、ホントだアウトプットに出た』
「で、これはリリースモードでもちゃんと出るから」
『ほい。あ、ホントに出た』
「つまり！」
『つまり？』
「デバッグビルドとかリリースビルドって言っても、こういう仕組みでなっ
てるから、たとえばリリースビルドでもある程度デバッグしたりはできるん
だよね」
『この OutputDebugString() とか、さっきの _DEBUG とか？』
「そゆこと。今はまだちょっと難しくても、こういうことを知っていれば、
あとで〈リリースビルドでデバッグしないと！〉って時でも」
『できるようになる？』
「なる！」

/*
    Preview Next Story!
*/
『で、それっていつのこと？』
「〈これっていつまで続くの？〉ネタはつまらないからやめない？」
『やめない。っつーか今回も長すぎでしょ』
「デバッグ編だけでこんなになるとはなー」
『なんで長くなるの？』
「教えたいことばかりだから」
『というわけで次回』
＜ Version 6.19 デバッグウィンドウがいっぱい ＞
「につづく！」
『そんなにプログラミングって大変なものなの？』
「……世の中って汚いよね……」
『答えになってなーい！』


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

・８月表紙壁紙登場！
　まだ全然描いてないけど予定では花火と火美ちゃん。火美ちゃんよりか花
火をうまく描けるか心配（爆）。


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

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
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
*/
////////////////////////////////////////////////////////////////////




