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

    KAB-studio.h


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

    送信日： 2001/04/30(Mon) No.105
    配信数： 3810（ 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/04/22 (Sun)
　EDiCube 発注！　それと臨時板改良。って言っても書き込み側だけだけ
ど。あとはテレビ色々。コメットさんとエンジェリックレイヤーの３ＤＣＧ
の違いとか。最後は MFC ページプレビュー機能〜。

2001/04/23 (Mon)
　研修はネットワーク後半。 HUB やルータの勉強できて良かったけど、テ
ストは良くなかった(汗)。眠いながらも３２万ヒット。

2001/04/24 (Tue)
　研修は UNIX 前半。でも１１月のとほぼ同じ(汗)。５月の研修は SOLPAC 
とゆー謎な会社の。そして……。ちなみにここでは「 Java ではなくて」
って書いてあるけど、 Java もやるそうな。最後は MFC ページプレビュー
機能の解決方法。

2001/04/25 (Wed)
　研修は UNIX 後半。テストは８４点。まーまー？　お給料入ったけどなん
か実感沸かず……。 EDiCube から「発送した」とゆーメールが！　逐一送
られて来るっていいねー。

2001/04/26 (Thu)
　研修はデータベース前半。正規化や SQL はほとんど分かってなかったん
で結構楽しかったかも。んでも明日のテストが不安だったんで、練習アプリ
付きの「やさしいSQL入門」を購入。そして EDiCube 到着。でもまだ触って
ない……。

2001/04/27 (Fri)
　研修はデータベース後半。テストは１００点〜。午後はアクセス。これは
かなり楽しかったです。これは結構いいかも〜。あとカレーと歩き。そして
これから９連休〜。

2001/04/28 (Sat)
　９連休の最初は EDiCube のセットアップ。ハード・ソフトとも何事もな
く構築終了。まーいくつか大変なとこもあったけど。あとメモリは１２８で
も足りなかった……。あとテレビ色々。ＥＲは大変そうだなぁ……。


////////////////////////////////////////////////////////////////////
/*                         風雅、舞い                             */
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.05
プリプロセッサとマクロ

「ここ最近よく出てくる #include や #define 」
『最初が # で始まる謎なヤツ』
「こういうのを〈プリプロセッサディレクティブ〉って言います」
『？？』
「英語で書くと Preprocessor Directive 。 Pre-process は〈事前処理〉
って意味。 Directive は指示する物って意味」
『前は〈プリプロセッサ〉って、〈ディレクティブ〉は省略してなかったん
じゃない？』
「うん、長いからプリプロセッサ、さらに〈マクロ〉って言うことも多いか
な」
『なんか全然違うけど……』
「マクロの話は後半で。ここでは〈プリプロセッサ〉で統一します」
『で、〈事前処理〉って何の前処理？』
「コンパイルの。つまりプリプロセッサディレクティブは、コンパイル前に
色々と処理をするためのものってこと」
『コンパイル前、ねぇ』
「分かりにくいかもね。ひとつ例を挙げると」

const int DEF_FLAG_OK = 1;

『定数作るのだね』
「これと」

#define DEF_FLAG_OK 1    // 定数。

『あ、これも定数作るのだ。でもこれはプリプロセッサのだね』
「機能的にはこのふたつは似てるけど、仕組みがまったく違うんです。まず
const int の方。これは普通の int 型の、中身を書き換えられない変数」
『中身を書き換えられない変数、って変くない？』
「『変くない？』よりは変じゃない」
『うー』
「で、もうひとつの #define の方。たとえば、この #define ののあとに」

    int i = DEF_FLAG_OK;

「ってあった場合…… #define の本当の機能、なんだか憶えてる？」
『単語を置き換える！　前々回に far とかでやったから憶えてるもん』
「そうでした。そして、 #define はプリプロセッサ、つまりコンパイル前
に処理するんです。ってことは、コンパイルする前に」

    int i = 1;

「に置き換えられるってこと」
『ええっ！？』
「って言っても、実際にファイルの中身が書き換えられるわけじゃないから
ね」
『あ、そういえばそうね。ってことは……〈書き換えられたとみなされる〉
ってヤツ？』
「そういうこと！　プログラムはプリプロセッサにかけられて整形されて、
それが実際のプログラムとみなしてコンパイルされるんです」
『ほー。っつーことは、 const の方は普通のプログラムとしてコンパイル
されるんだ』
「そう、ちゃんとしたプログラムとしてね。ここで重要なのは、プリプロ
セッサが〈コンパイル前に処理する〉ってこと」
『どゆこと？』
「火美ちゃんが今言ったように、 const の方はコンパイルしたときにちゃ
んと残ってるから、エラーもそれなりのものになります」

    const int DEF_FLAG_OK = 1;
    DEF_FLAG_OK = 100;

『 const だからできないよね』
「だからこういうエラーが出ます」

error C2166: 左辺値は const オブジェクトに指定されています。

『なんとなくわかるね。で、これを #define に変えると？』

#define DEF_FLAG_OK 1    // 定数。
    DEF_FLAG_OK = 100;

『あ、エラーが違う』

error C2106: '=' : 左のオペランドが、左辺値になっていません。

『左のオペランドって、 = の左側ってことだよね、だから DEF_FLAG_OK 』
「それが #define に置き換わるから？」
『ってことは……』

    1 = 100;

『これでエラーになっちゃうんだ』
「直にこう書いても同じエラーが出るから。で、一番重要な点は、プリプロ
セッサは基本的に分かりにくい！　ってこと」
『分かりにくい？』
「そう、だって見た目のプログラムが書き変わって、それがコンパイルされ
るんだもの。コンパイルエラーが出ても見つけにくいんだよね」
『そういえば、前に #define よりも const を使った方がいいって言ってた
けど、それが理由？』
「それが理由。プリプロセッサはできるかぎり使わない方向に向かってるか
な。でも！」
『でも？』
「プリプロセッサは自由度が高いから、昔からかなり色々使われてるんだよ
ね。今も使われてるし。たとえば TRACE() 」
『え、 TRACE() が！？　関数じゃないの？』
「関数じゃないんだよね、これが。 #define には、引数を付けることがで
きて、これが関数っぽくできるんです」

#define MACRO( x ) TRACE( "%d\n", x ) // マクロ

『むー、なんかよくわかんない』
「つまり」

    MACRO( 100 );

「ってあったら」

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

「に置き換わるってこと。普通の #define A B だとスペースが A と B の
区切りだけど、 ( ) の付いたのだと ) が区切りになるから」
『 ) までのが、そっからあとの ) までと置き換わるってことね』
「こういう、 #define で作った関数っぽいのが〈マクロ〉って呼ばれるも
のです」
『これがマクロなのねー。 TRACE() なんかもこういうふうにして作られて
るんだ』
「基本的にはね。関数と違って、マクロは全部大文字で書くのが一般的」
『っつーか #define のは全部大文字じゃない？』
「あ、そうだね。でも const int をそうすることもあるかも。ま、それは
ともかく一番重要なのは、マクロを関数と同じように考えちゃダメ！　って
こと」
『そなの？　普通に使えそうだけど』
「まず一番大きいのが、置き換えの副作用。まず関数の場合

void NanimoShinai( int p_i )
{
    p_i;
    p_i;
    p_i;
}

「これをこう呼び出します」

    int i = 100;
    NanimoShinai( ++i );
    TRACE( "%d\n", i );

『んーと、っつーか何もしてないんだから、 i が１増えて 101 なだけじゃ
ん』
「もちろん。で、これをマクロに置き換えてみます」

#define NANIMOSHINAIMACRO( x ) \
{         \
    x;    \
    x;    \
    x;    \
}

「あ、プリプロセッサは〈改行で終端〉ってみなされちゃうから、そうみな
して欲しくないときには \ を付けます。だからこれは」

#define NANIMOSHINAIMACRO( x ) { x; x; x; }

「と同じってことだから」
『 \ は実際には無視して考えればいいんだね』
「そゆこと。１行の方が〈どう置き換わるか〉は分かりやすいかな」
『で、これだとどう違う……あっ！　 i が 103 になってる！』
「実際に置き換えてみると分かるけど」

    NANIMOSHINAIMACRO( ++i );

「が」

    {
        ++i;
        ++i;
        ++i;
    }    

『げ！　３回も増えてる！』
「関数と違ってマクロはそのまんま置き換えるから、こういう問題が出てく
るわけ」
『関数だと、外と中じゃ全然違う世界だもんねぇ』
「さらに」

#define MAKEERROR( x )    \
{         \
    x;    \
    X;    \
    x;    \
}    

『あ、大文字と小文字で間違ってる！』
「呼び出す部分は」

    MAKEERROR( 100 );

「ビルドして」
『ほい。やっぱしエラー出たね』
「ここで重要なのは、エラーの出る行」
『行……？　 MAKEERROR() 呼び出してる行に出てるね』
「もし関数なら、 X; \ の行にエラーが出ます」
『そういえば！』
「これは大きな問題。これじゃ、 MAKEERROR() のどこが問題なのか分から
ないでしょ」
『ホントね、 MAKEERROR() の真ん中へんでエラーが出てるはずなのに』
「というわけで、マクロは一見関数に似てるけど、実はかなり違うものなの
です。というわけで次回に続く！」

/*
    Preview Next Story!
*/
『もしかして、水希ちゃんてマクロ嫌い？』
「うん、僕はマクロ反対派」
『反対派とか賛成派とかあるの？』
「あるよ。そりゃもう、 ML や掲示板で、血で血を洗う争いが」
『うわぁ』
「というわけで次回」
＜ Version 6.06 プリプロセッサ色々 ＞
『につづく！』
「ま、最近はマクロくらいで論争にはならないだろうけど」
『じゃあ最近はサンマとかクジラとかで？』
「魚のマグロ違う〜っ！」


////////////////////////////////////////////////////////////////////
/*                ２００１年５月７日（月）の更新予定              */
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
*/
////////////////////////////////////////////////////////////////////




