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

    KAB-studio.h


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

    送信日： 2001/04/23(Mon) No.104
    配信数： 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/Comic/HotHerb/


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

2001/04/15 (Sun)
　日曜はぷらとわ書きやホットハーブ、そしてアニメいっぱい(爆)。やっぱ
しコメットさんとエンジェリックレイヤーが当たり？　北条時宗もいい感じ
です。んでＡＲＭＳスタッフもどきの願い(爆)。

2001/04/16 (Mon)
　Ｃ言語の研修スタート。しかし中身はテスト＆自習……。ホットハーブは
下書き。んで東京っていい？　プログラマーってどう？　デジタル化は進ん
でるの？　なツッコミ。

2001/04/17 (Tue)
　Ｃ言語２日目。謎な DOS ゲームを作成。サンマルクでごはん食べたり１
キロほど痩せたり。

2001/04/18 (Wed)
　Ｃ言語３日目は教える側に(汗)。いやまー楽しいねんけど、でも待ち時間
長いし。そして、野球延長ではじめの一歩を録れ逃す(泣)。くーっ。あと配
列の処理方法。１マスずつってのはどう？

2001/04/19 (Thu)
　Ｃ言語４日目。ビンゴゲームしたりテストで２点下がったり(汗)。っつー
かこのテストは……。ホットハーブは主線描き。あとキーボードの Ctrl の
位置が(泣)。

2001/04/20 (Fri)
　ネットワーク前半。講義中心で面白いけどちょっと退屈？　そしてとうと
う、ホットハーブ第１話完成！　出来は……？　そしてテストの話の続き。
テストを軽々しく考えてはいかーん！

2001/04/21 (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.04
あるのにない！！

「さて今回は、使えると思ったら使えない！　って話」
『どゆこと？』
「たとえば、前に紹介したこんなコード」

    int i;
    std::ifstream cIFStrm;
    cIFStrm.open( "Data.txt" );
    cIFStrm
        >> i;

『ファイルから読み込むのだね』
「これは Ver 5.09 ( No.074 ) で紹介したね。たとえばこのコードが、本
に載ってるとかホームページに書いてあるとかで、そのまま書き写したとし
ます」

void CDebugDlg::OnButton1() 
{
    int i;
    std::ifstream cIFStrm;
    cIFStrm.open( "Data.txt" );
    cIFStrm
        >> i;
}

「これをこのままビルドするとエラーになります」

DebugDlg.cpp
error C2653: 'std' : 識別子がクラス名でも名前空間名でもありません。
error C2065: 'ifstream' : 定義されていない識別子です。
error C2146: 構文エラー : ';' が、識別子 'cIFStrm' の前に必要です。

「なんでだっけ？」
『えーっと、こういうのを使うためにはインクルードしなきゃいけないって
ことだよね。このときは確か fstream っていうのをインクルードしたね』
「そう、 std::ifstream の宣言が fstream ヘッダーファイルに書かれてる
から、これを使うためにインクルードする必要があるんです」

#include "stdafx.h"
#include <fstream>       // ここ。
#include "FileTest.h"
#include "FileTestDlg.h"

「こういうことは、 iostream だけじゃなくて、ランタイムでも API でも 
MFC でもあることだから」
『つまり、関数とかクラス使うためにインクルードしなきゃいけないことが
あるってこと？』
「そういうこと。基本的に MFC を使ってるときは、基本的な API 、ほとん
どの MFC 、一部のランタイムがそのまま使えるようヘッダーファイルをイ
ンクルードしてます」
『たとえば？』
「たとえば fopen() 。 MSDN で見てみて」
『 MSDN 〜』
「 MSDN の fopen() のリファレンスに〈必要なヘッダー〉ってあるでしょ」
『 stdio.h がそうだって書いてあるね。つまりこれが、インクルードしな
きゃいけないファイルなんだ。あ、でも』
「そう、 Ver 5.11 ( No.076 ) ではわざわざインクルードしてないでしょ。
これは、もともとインクルードしてるから」
『 MFC がってこと？』
「そういうこと。 MFC のインクルードファイル Afx.h でインクルードして
ます。ちなみに Afx.h は Afxwin.h でインクルードしてて、この Afxwin.h 
は各プロジェクトの stdafx.h でインクルードしてます」
『なんか複雑』
「うん、実際には〈インクルードされてるかどうか〉は調べなくていいよ。
来週解説するけど、調べるのも大変だし、２重にインクルードしても問題な
いから」
『ん？　つまり、わざわざ stdio.h をインクルードしても大丈夫なんだ』
「そゆこと。で、どのヘッダーファイルにあるって知ってるならインクルー
ドしておいてもいいし、しないでおいてエラーが出たら、でもいいし」
『 std::ifstream が fstream にあるって調べるのはどうすればいい？』
「まずは MSDN 。ランタイムはさっき言った〈必要なヘッダー〉に書いてあ
るから。 MFC の場合は…… CWnd を見てみて」
『ほい。あ、下のとこに #include <afxwin.h> ってあるね』
「そう、これをインクルードすれば OK 」
『そういえばこれは stdafx.h でインクルードしてたんだ』
「 API の場合は…… GetWindowText() の API のを見てみて」
『日本語のと英語のがあるけど』
「両方とも。日本語の方は〈ヘッダ : winuser.h 内で宣言〉って書いてあ
るし、英語の方は "Header: Declared in winuser.h." って書いてあるし」
『これ見てインクルードすればいいんだね』
「それか【ファイルから検索】でどこにあるか調べるか。ただ、 MFC やラ
ンタイムは、ソースファイルでも引っかかるから気を付けて」
『……ソースファイルはインクルードしちゃいけない？』
「いけません。ヘッダーファイルには関数やクラスを使うために必要な情報
が、ソースファイルには関数やクラスが機能するための中身が入ってます。
使うのに必要なのは」
『ヘッダーファイル、ってことね』
「ま、拡張子で見分ければソースファイルかどうかはわかるでしょ」
『それに、置いてあるフォルダ違うし』
「あ、そっか。僕は【サブフォルダも探す】で API も MFC もランタイム
も、ヘッダーファイルもソースファイルも全部いっぺんに検索しちゃうか
ら」
『その方がめんどそう……』
「あ、あと、 ifstream なんかの iostream 系は、 MSDN で調べると難しい
と思うよ。 std::ifstream は、ホントは std::basic_ifstream って名前だ
から」
『ホントはって？　あ、 typedef ！』
「そう、そういう別名になってるし、テンプレートって難しい機能も使われ
てるし。それに…… fstream って、一応ヘッダーファイルなんだけど」
『拡張子ないね』
「実は【ファイルから検索】だとこの拡張子ないのはうまくいかないんだよ
ね」
『ホントだ、【ファイルから検索】に、検索するファイルの拡張子を選ぶの
があるんだね』
「他の開発環境だと、 fstream.h が本体で、 fstream からインクルードし
てる仕組みになってるんだけどね」
『それって VC がダメってこと？』
「そういうことになるのかなぁ……ま、こういうふうに iostream の場合に
は難しい部分があるけど、基本は MSDN か【ファイルから検索】で」
『ほいほい』
「で、ここまでが基本。ここからは応用」
『……難しい？』
「ちょっとね。まず、さっきの std::ifstream の例で、コンパイルエラー
が出ないようにしましょう。 fstream をインクルードして」
『この前と同じようにすればいいんだよね。じゃ、ここ』

#include "stdafx.h"
#include <fstream>       // ここ。
#include "Debug.h"
#include "DebugDlg.h"

「ビルドっ、エラー出ません！」
『さて今度は、 std::ifstream を CDebugDlg のメンバ変数として持たせて
みましょう。 DebugDlg.h を開いて』

class CDebugDlg : public CDialog
{
    std::ifstream m_cIFStrm;    // ここに追加。
// あとは略。

『ビルド、うおエラーが出た！』

Debug.cpp
error C2653: 'std' : 識別子がクラス名でも名前空間名でもありません。
error C2146: 構文エラー : ';' が、識別子 'm_cIFStrm' の前に必要です。
error C2501: 'ifstream':識別名を宣言するのに、型が指定されていません

『あれ？　このエラーって、さっきの fstream をインクルードしてなかっ
た時に出たのと似てない？』
「ほとんど同じ。つまり、 std::ifstream なんてどこにもない！　って言
われてるわけ」
『ええっ！？　それ変！！　ちゃんとインクルードしたもん』
「うん、 DebugDlg.cpp でインクルードしたはずだよね。ちょっとコンパイ
ルの話思い出してみて。コンパイルって、各ソースファイルごとにするって
言ったでしょ」
『うん、言った』
「ってことは、ヘッダーファイルの読み込みも、各ソースファイルごとにさ
れてなきゃいけないってこと。上のエラーよく見て。 Debug.cpp って書い
てあるでしょ」
『ホントだ！　さっきのエラーは DebugDlg.cpp って書いてあったのに』
「さっきのエラーは DebugDlg.cpp をコンパイルしてたときに出たエラー、
今度のは Debug.cpp をコンパイルしてたときに出たエラー。 Debug.cpp の
インクルードしてる部分を見ると……」

#include "stdafx.h"
#include "Debug.h"
#include "DebugDlg.h"

「ここで DebugDlg.h をインクルードしてるでしょ」
『そっか！　ここでも fstream をインクルードしないと、 DebugDlg.h の
中で std::ifstream 見つけても何か分かんないんだ！』
「そういうこと。このままだと、 Debug.cpp をコンパイルしてるときに 
std::ifstream の情報が全然入ってないから、 DebugDlg.h を読み込んだと
きに std::ifstream を理解できないわけ」
『はー、なるほど。ってことは』

#include "stdafx.h"
#include <fstream>
#include "Debug.h"
#include "DebugDlg.h"

『ってすればいいんだ。あ、質問！　インクルードって、上から順番にして
く？』
「してくよ。だからその順番」
『なのね。だから』

#include "stdafx.h"
#include "Debug.h"
#include "DebugDlg.h"
#include <fstream>

『ビルド。あ、やっぱり同じエラーが出た。 Debugdlg.h をインクルードす
る前に fstream をインクルードしなきゃいけないわけね』
「そう、情報が先に入ってないと。あと、こういうふうに各ソースファイル
でインクルードするのは面倒だから、たいがいは stdafx.h の中でインク
ルードします」

#endif // _AFX_NO_AFXCMN_SUPPORT
#include <fstream>    // ここ。

『そっか、 stdafx.h って Debug.cpp からも DebugDlg.cpp からも インク
ルードされてるから』
「そういうこと。 <> で囲むようなの、つまりライブラリのヘッダーファイ
ルをインクルードするときには stdafx.h でした方がいいかな」
『そういえば、 <> で囲むのと "" の違いは？』
「 "" はプロジェクト内のファイル。 <> は、【ツール】−【オプション】
ダイアログの【ディレクトリ】−【インクルードファイル】見てみて」
『あ、さっき言ってた API や MFC の置いてあるフォルダ！』
「ここに指定してあるフォルダからインクルードファイルを探すのが、 <> 
でのインクルード」
『ってことは、これで好きな所にインクルードファイル置けるの？』
「もちろん。他の人が作ったライブラリを使う時には、そのライブラリの置
き場所をここで指定するようにね」
『 API とかのフォルダにコピーしちゃダメ？』
「駄目！！」

/*
    Preview Next Story!
*/
『そういうのダメなの？』
「ダメだって」
『なんで？』
「元々あるのと同じ名前のファイルがあったらまずいでしょうが」
『う”、そういえば』
「というわけで次回」
＜ Version 6.05 プリプロセッサとマクロ ＞
『につづく！』
「力業に頼らず、スマートに！　これが優れたプログラマーへの近道」
『こんなだらだら教えてる人が何言ってんだか』
「はぅ」


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