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

    KAB-studio.h


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

    送信日： 2001/05/14(Mon) No.107
    配信数： 3770（ 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/05/06 (Sun)
　久々実家帰宅。食器とか色々持ってく。でも物ばっかで片付かない〜。あ
といつも通りテレビ色々。寿蘭のＥＤっていいなー思うんだけど。

2001/05/07 (Mon)
　引っ越して最初の会社、そして Java 研修初日。 SOLPAC さんとの合同研
修でした。 Java 研修の内容は、５月末までに基礎、オブジェクト指向、例
外処理、アプレット、マルチスレッド、 awt での GUI 構築、イベント処
理、最後にデータベースやサーバーサイドとかとか。終わるんか？

2001/05/08 (Tue)
　 Java 研修。 C++ に近いから結構簡単かも。細かい違いはあるけど。旧
キーボードもそんな大変じゃないかなぁ。その他、駅ビル地下散策や一人暮
らしの悩みとゆーか。

2001/05/09 (Wed)
　 Java 研修、っつーか XML 研修(爆)。今回はサンプルを通しただけだけ
ど。あと西友で買い物したくらい。何もない日は何もないね。

2001/05/10 (Thu)
　 Java 研修は引き続き XML 。 Xerces には DOMDocumen ってないの？　
他に普通に Java も勉強。 abstract とかちょっと複雑。仕事のあとに勤務
先について。 IBM 系らしい。川崎だったらいいなー。

2001/05/11 (Fri)
　 Java 研修はおとなしく普通に勉強。 throws って C++ の throw() より
かなり厳しいっす。Graphics と Image が、 Win32API の DC とビットマップ
の関係そのままで面白かったり。そのあとクラスでの懇親会。楽しかったの
はなぜ？

2001/05/12 (Sat)
　コインランドリー開拓！　でも？　そして電子レンジでご飯を炊く！　な
かなかいい感じじゃないですかー。部屋のセッティングしたり、どうもこう
いうのがなぜか好きだ(汗)。そして、嘘っぽさを現実に。


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

■　序　−７−

「引っ越し……しかないか」
　そう、舞の父親、正は言った。
「私……やだな」
　サイダーの螺旋が宙を舞い、指をくるりと回せば宙返りをして元のコップ
へと落ちていく。白く飛び跳ねる炭酸を、舞は切なそうに見ていた。
「それに、知られてないかもしれないし、知られてたらもうどこに行っても
無理だと思う」
「母さんの所なら、安全だと思うけどね」
「あんな何もないとこ、戻りたくないな……」
「なんにせよ、母さんに連絡を取る必要があるな」
「ってことは二週間くらいは時間取れるよね」
　奨が舞に目配せしても、舞はそれほどうれしそうには見えなかった。
「あんまり、気にするな。仕方のないことだ」
　顔を上げた先にある父親の顔は、同じように悲しそうだった。
「普通の生活が送れるかどうかは本当に運でしかなかったんだ。舞は間違っ
たことをしていない。問題が起きてしまった、それだけなんだ……」
　正は、その運命を悲しんでいた。それは、二十年前にもうすでに避けられ
ないことだと知っていたからだった。自分の妻、美咲と結ばれたその日か
ら……。
　舞は、そう思ってはいなかった。自分が悪いと考えていた。自分が持って
しまった力……使いたくはない、でも、すでに自分の一部と化している。そ
れは、認めざるを得なかった。
　それに、否定するのは、寂しい……。
「あたし、もう寝るね」
　宙に浮いた水が落ちて、滴が舞った。
　正も奨も、舞に声を掛けられなかった。
　寝たのだろうか。気づいたら、すでに朝だった。陽が差していること以外
は昨日と同じダイニングに入ると、いつものようにランニングを終えた奨が
フローリングに座り込んでいた。
　いつもと違うのは、その床一面にありとあらゆる新聞が置かれていること
だった。毎日取っているものから技術系新聞やスポーツ新聞、はては英語や
広東語で書かれた物まで数十種類の新聞が無造作に広げられ置かれていた。
「何よ、あたしのスクラップブックでも作る気？」
「それもいいかもな、出来りゃ」
　自分の方を向いた奨の表情を見て、舞は完全に目を覚ました。
「でき……れば？」
「事件の記事がないんだ、どの新聞にもな……」
　舞は、嵐の襲来を感じた。
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『質問！』
「はい火美ちゃん」
『あたしはどのくらい勉強すればプログラマーですかっ！？』
「それって、いつまでぷらとわが続くかってこと？」
『そうじゃなくって、たとえば i-Mode 』
「うん、 i-Mode 」
『なんか最近問題多すぎじゃん』
「う”！」
『つまりね、ろくな技術なくてプログラマーになっていいのかってこと！』
「いいんじゃない？　会社がプロジェクト任せたんだから」
『せきにんてんか〜』
「うっさい！　プログラミング業界ってのはそーゆーもんなの！」
『そなの？』
「なのかな」
http://www.kab-studio.com/
_______________________________________________________________[KCM]


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

　Version 6.07
条件コンパイルの世界

「今回は前回の続き。前回 #if defined や #ifdef を紹介しました」
『 #define されていたら〜ってヤツね』
「 C 言語をする上で、これは死ぬほど付き合わなきゃいけない相手です。
そして結構問題のある相手です」
『問題があるぅ！？』
「そう。ま、便利な部分もあるけどね」
『はっ、そういえば水希ちゃんは反マクロ派だった……』
「じゃ、まず一番メジャーな使われ方から紹介しましょう。 Windef.h を見
てみて。その最初に」

#ifndef _WINDEF_
#define _WINDEF_

『うん、書いてある』
「で、最後に」

#endif /* _WINDEF_ */

『書いてある』
「これはほとんどのヘッダーファイルに書かれてるもので、火美ちゃんが自
分でヘッダーファイルを作るときには火美ちゃんも書いた方がいいもの」
『そんな大事なんだ、なんでだろ』
「考えてみて」
『えっと、 #ifndef は #if !defined と同じだから _WINDEF_ が #define
されていなかったら、だね』
「そう」
『いなかったら、そのあとから……最後の #endif まで、えっと……そのま
ま残るんだよね』
「そのとおり！　よくできたねー、こんがらがるでしょ」
『こんがらがる〜。でも、そのまま残るって、なんかそのままだね』
「うん、そういうもの。逆の場合だと」
『えっと、 _WINDEF_ が #define されてたら、そのあと……空白。ってこ
とは、 Windef.h のほとんどが消えちゃうって事？　それってやばそう』
「それが、こうしないとやばいんだよねー。 _WINDEF_ ってどこで #define
されてる？」
『どこ……あ、 #ifndef _WINDEF_ のすぐ下でしてるじゃん』
「ってことは、 Windef.h が最初に読み込まれたときに #define _WINDEF_ 
されるってこと。で、２度目に Windef.h が読み込まれたら？」
『あ！　そっか、そのときは _WINDEF_ が #define されてるから、 #ifndef
で Windef.h のほとんどが読み込まれない！』
「つまり？」
『つまり、こうすればヘッダーファイルがたった１度しか読み込まれなくな
る！』
「そういうことでした」
『へー、面白い！　こーゆー仕組みに使うことできるんだー』
「 Ver 6.04 ( No.104 ) で〈２重にインクルードしても問題ない〉って
言ったのはこれが理由」
『ってことは、ほとんどのヘッダーファイルがそうなってるんだ』
「そうだよ。たとえば Debug プロジェクトの各ヘッダーファイルも」

#if !defined(AFX_STDAFX_H__D4FAC1E8_略_F492281A3E79__INCLUDED_)
#define AFX_STDAFX_H__D4FAC1E8_略_F492281A3E79__INCLUDED_

// 中身

#endif // !defined(AFX_STDAFX_H__D4FAC1E8_略_F492281A3E79__INCLUDED_)

『む、なんか変な数字か文字かなんか』
「 VC が自動生成したのだからね。普通は _WINDEF_ みたくヘッダーファイ
ルの名前に近いのにするけど、逆に近いと他のヘッダーファイルと重なっ
ちゃったりするから」
『だからこんな無茶苦茶なの？』
「そゆこと。これは各ファイルで違うようになってるから
『ふーん。あ、そうそう、質問！』
「はい、火美ちゃん」
『今回のふたつもそうだし、前回のこれ』

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

『もそうなんだけど、 #endif ってなんで最後に #if の条件がコメントさ
れてるの？』
「それは、ネストが判りにくいから。今回みたいな使い方だと、インデント
しようがないでしょ」
『ヘッダーファイル全体がインデントしちゃうね』
「だから、 #if と #endif の対応が判りにくいわけ」
『そこで対応する #if をコメントで書いとくんだ。でもなんか応急処置っ
ぽいね』
「ま、プリプロセッサそのものの分かりにくさってことかも。あとついで
に」

#pragma once

『そいやこれもプリプロセッサだね。どっかで見たような感じ……』
「 #pragma は〈プラグマ〉って読んで、色々便利なことができるプリプロ
セッサ。そのひとつが #pragma once で、こうするとこのファイルを１回し
か読み込まないようにしてくれます」
『へ？　じゃー #if - #endif って要らないじゃん』
「そうもいかないんだよね。 #pragma って最近の開発環境じゃないと使え
ないから」
『それってもしかして、 #if _MSC_VER > 1000 と関係してる？』
「関係してます！　まさにそのためのプリプロセッサ」
『ほ〜』
「この例みたいに、プリプロセッサには〈場合によってプログラムを変える
機能〉もあります」
『つまりこの例だと、 _MSC_VER って組み込みマクロが、 1000 以上に置き
換わるんなら、 #pragma once をプログラムに置きましょう、ってことだよ
ね』
「そういうこと。この例では組み込みマクロをフラグにしてるけど、それ以
外の #define されたものをフラグにすることも多いです」
『たとえば？』
「自分で #define するものとか。ライブラリの中には #if がいっぱい入っ
てて、自分で #define をすることでライブラリを書き換えることができま
す」
『つまりスイッチになるわけだ』
「他に #define 以外でも #define と同じようなことができます。【プロ
ジェクト】−【設定】ダイアログ開いて」
『ほい、いつものね』
「【プロジェクトの設定】ダイアログの【C++】ページ、カテゴリ【一般】
の【プリプロセッサの定義】の項目を見て」

WIN32,_DEBUG,_WINDOWS,_AFXDLL,_MBCS

「ここに書き込んだのはすべて #define されたものとして判断されます」
『つまり #define WIN32 ってなってるんだ。でもわざわざここでする必要
ある？』
「あるよ。この〈プロジェクトの設定〉っていろんな種類作れるから、それ
ごとに #define を変えることができるからね。左上の【設定の対象】を
Win32 Release に変えると……」

WIN32,NDEBUG,_WINDOWS,_AFXDLL,_MBCS

『を、かなり変わった！』
「これで #define がかなり変わるから、ライブラリの中身もかなり変わる
わけ」
『へー』
「こういうのを〈条件コンパイル〉っていいます」
『場合分けしてコンパイルするわけねー』
「ただ……」
『あ、水希ちゃん、ダークモードだ』
「確かに、この条件コンパイルはばしばし使われてます。たとえば、
Ver 6.03 ( No.103 ) で紹介した near と far 」
『普通は空白、ウィンドウズ 3.1 だったら……そっか！　その〈 3.1 だっ
たら〉が条件になるんだ！』
「そゆこと。 MFC を含めて、ライブラリはこの条件コンパイルを使って、
いろんな環境で使えるようになってます。でも！」
『……でも？』
「最初はこういうのはやめた方がいいよ。プリプロセッサは、実際にどの
コードが使われてるかって分かりにくいからね」
『確かに、 #ifdef の分岐って〈それが #define されてるか〉だから、普
通の if とかよりも分かりにくいね』
「だから、当分はこういうのは使わない方がいいかも」
『当分っていつまで？』
「ま、使うなって言ってもマクロに凝ったりする時期って必ずあるから、そ
れで痛い目に遭ってから数年後ってとこかな」
『なんかそれって危ない青春時代みたいな変な表現……』
「っつーか実際、プリプロセッサやマクロは便利だから、使い始めるとどん
どん使う傾向にあるんだよね」
『たとえば？』
「たとえば、さっきのウィンドウズ 3.1 のとか。これは使わないけど、も
少し話を進めて、ウィンドウズとマックと両方で使えるプログラムとか」
『そいやマックでもアプリ作れるわけだからねぇ』
「で、自分で作ったのが、どっちの OS でも使える！」
『それってむっちゃかっこよくない！？』
「でしょう。そういうのがプリプロセッサを使うとできるわけ」
『そっかー、それだとはまっちゃいそうだね』
「他にも、プリプロセッサならではの機能とかあったり。たとえば __LINE__ 
ってマクロ」
『なんか妙なのだね』
「これは、その行の行番号に置き換えられるんです」

    TRACE( "%d\n", __LINE__ );

『ほー、 TRACE() した行の行番号が出た！』
「 _MSC_VER なんかと同じ組み込みマクロのひとつで、自動的にその行の行
番号に置き換えてくれます」
『これは便利だね。エラーが出たときとかこれで報せられるもんね』
「さらに、たとえばこれを使うマクロ」

#define TRACE_LINE TRACE( "%d\n", __LINE__ )

『 TRACE_LINE って書けば上のと同じのができるわけだ』
「これは関数じゃダメでしょ」
『そっか、関数だとその関数の中の行番号が出ちゃうんだ！』
「これはマクロの〈置き換える〉って機能を活用した例。他にも、今度解説
するけど TRACE() もマクロ」
『そいやそんなこと言ってたね』
「上の【プリプロセッサの定義】に _DEBUG ってあるでしょ。実はこれが 
#define されてなかったら、 TRACE() は空白に置き換えられちゃうんです」
『つまり消えちゃうってこと？』
「そゆこと。 TRACE() はデバッグ用だから、リリース用のからは削除する
んでこういう機能が付いてるんです」
『ほー。要するに便利ってことね』
「う”……あくまで、便利な部分もある！　って話」
『はいはい』
「〈２度読み込み〉は #pragma once で、 #define 定数は const int で、
まだ教えてないけど関数似のマクロは inline 関数やテンプレートで、って
感じに置き換えられるんです」
『つまり、実際にはプリプロセッサは使う必要なし？』
「少なくとも自分で書く分にはね。プリプロセッサよりも安全なものを使っ
ていくことにしましょう！」
『はいはい』

/*
    Preview Next Story!
*/
『でも結局、そのテンプレートとかって知らないとダメってことよね』
「プリプロセッサは自由度高くて、少し知ってるだけで応用できるからね」
『じゃープリプロセッサの方がいいんじゃん』
「そうじゃないんだってばー」
『というわけで次回』
＜ Version 6.08 バグも色々 ＞
「につづく！」
「外科医がメスをペーパーナイフ代わりに使っちゃまずいでしょ？」
『出た水希ちゃん必殺の医療系たとえ！』
「ちゃかさないでーっ！」


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

・「作者について」更新
　引っ越ししたり新しいＰＣにしたり、色々変化のあった身の回りを作者に
ついてに反映させます。まーそんなところでお茶を濁すってゆーか（汗）。
[ 作者について ]
http://www.kab-studio.com/Info/Kaburaya/index.html


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

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




