#pragma twice

KAB-studio > プログラミング > #pragma twice > 049 Version 3.24 デバッグビルドとリリースビルド

#pragma twice 049 Version 3.24 デバッグビルドとリリースビルド

前のページへ 表紙・目次へ 次のページへ

 Version 3.24
デバッグビルドとリリースビルド

というわけで、〈計算機アプリケーション〉は完成ってことにします
……なんだかなー
でもね、こういうプログラムって手を加えていくとキリがないし、手を加
えすぎてもね
シンプルイズベスト! どの辺がいちばんいいか、とかも考えるの大事だ
よね
そうそう
ってことはこれくらいシンプルな計算機が実はウケたり?
それはない。さて、おさらいも兼ねて、これまで手を加えてきたところを
見ていきましょう。まず、 Calc.cpp に GetTheApp() って関数を作りまし

 theApp そのものを返す関数だよね
次に CCalcApp::InitInstance() 。これもかなりお世話になったね
なったねーここは

    CCalcDlg dlg;
    m_pMainWnd = &dlg;
    // のあとに追加しました。
    CString cCompanyStr;
    cCompanyStr.LoadString( IDS_REG_COMPANY );
    SetRegistryKey( cCompanyStr );

そういえばこれだけなんだね、ほとんど CCalcDlg に移しちゃったから
プログラムはできる限り小さい方がいいからね。あ、あとこのあとに

    int nResponse = dlg.DoModal();
    if (nResponse == IDOK)
    {
    }
    else if (nResponse == IDCANCEL)
    {
    }

これは最初からあるのそのままだね
でも【OK】ボタンを押したとき、とかは CCalcDlg に移したから
あ、いらないんだ、この if とか
だから

    dlg.DoModal();

うわー、かなり小さくなっちゃったね
プログラムの〈なんで〉を知っていれば、最初からあるものを削ることも
できるってことだね
削る?
そ。ブラッシュアップって言うんだけど、無駄なプログラムが少なければ、
ビルドしたあとの実行ファイルが小さくなるし、少し速くなるから
ぜい肉みたいなもんね
でも増やすのは楽だけど減らすのは結構大変。そのために
おやつ抜き
じゃなくてー、プログラムのちゃんとした知識が必要ってこと。それにお
やつはあった方がやせられるって説もあるよ
なんでそんなこと知っとんねん……
さて CalcDlg.cpp 
こっちにほとんどのプログラムがあるんだよね
そういう風にしたからね。まずは CCalcDlg::OnInitDialog() 
えーっと、前々回の時は、書き加えた部分全体を載せてなかったから、今
回載せます

//  SetIcon(m_hIcon, FALSE);        // 小さいアイコンを設定
    SetIcon( AfxGetApp()->LoadIcon( IDI_DLGICON ), FALSE);

    // TODO: 特別な初期化を行う時はこの場所に追加してください。
    CString cDialogStr;
    cDialogStr.LoadString( IDS_REG_DIALOG );
    CString cAnsStr;
    cAnsStr.LoadString( IDS_REG_ANS );

    m_iAns = GetTheApp().GetProfileInt( cDialogStr, cAnsStr, 0 );
    UpdateData( FALSE );

あれ、アイコンのって
大きいアイコンと小さいアイコンの話の時のだね。 Ver 3.6 ( No.031 )
を参照してください
そうそう、小さいアイコンは別にしとくんだよね
ちなみにここにある AfxGetApp()-> と、この前作った GetTheApp().は同
じだったりします
どゆこと?
つまり

    SetIcon( GetTheApp().LoadIcon( IDI_DLGICON ), FALSE);

ってできるってこと
はて、分かるような分からないような……
ホントは、わざわざ GetTheApp() を作る必要はなかったってことだね。
元々 AfxGetApp() っていうのが MFC に用意されてるから
ってことは無駄なことさせられたってことぉ?
でもさ、 -> 演算子って
知らん
でも . は
知ってる。 dlg.Modal() みたいに、メンバ関数やメンバ変数使う時の
だからわざわざ作ったってことね
でも -> と . の違いって?
それはもちょっと先でね。あと、CCalcDlg::OnInitDialog() の最初の所
で CDialog::OnInitDialog() が呼ばれてるのも確認しといて
あ、ホントだ。これってこの前の、オーバーライドとかのと同じ?
そゆこと。あと、【=】ボタンを押したときと、【OK】ボタンを押したと
きのイベントハンドラ。これはまとめて

void CCalcDlg::OnBEqual() 
{
    UpdateData( TRUE );
    m_iAns = m_iLh + m_iRh;
    UpdateData( FALSE );
}

void CCalcDlg::OnOK() 
{
    CDialog::OnOK();
    CString cDialogStr;
    cDialogStr.LoadString( IDS_REG_DIALOG );
    CString cAnsStr;
    cAnsStr.LoadString( IDS_REG_ANS );

    GetTheApp().WriteProfileInt( cDialogStr, cAnsStr, m_iAns );
}

これは完璧?
完璧ってことは……
えーそーなの?
例えば、 cDialogStr 作ったりするのって CCalcDlg::OnInitDialog() で
もしてるでしょ
あ、そういえば
こういうふうに、同じのをいろんなとこに書くとミスが出やすいから、本
当は CCalcDlg のメンバ変数とかにして使い回す方がいいかな
なるほど
で、プログラム関係はこれくらい
ホント、基本的にシンプルだよね
ただ、量的にはそれなりにあるよ。イベントハンドラごとに分かれてるか
ら、少なく感じるだけで
全部まとめたら大きいってことなんだ。でも〈小さいプログラムの組み合
わせ〉が大事なんでしょ?
そういうこと。こんなふうにイベントハンドラ関数ごとにプログラムを分
ければ分かりやすいってことだね
はーい
あとはリソース
アイコンとかバージョン情報とか、バージョン情報ダイアログとかだね。
うん、これはちゃんとしたよ
フリーウェアとして公開するんならこういうのもちゃんとしなきゃね。
で、今回最後は
デバッグビルドとリリースビルド! ってなに?
んーとまず、プログラムの間違いを〈バグ〉って言います
あ、ゲームとかでよく言うよねそれ。画面ぐちゃぐちゃになって〈あ、バ
グった!〉とか
そのバグを取り除くことを〈デバッグ〉っていいます
で、デバッグビルド?
そう。実は、今までしてきたビルドはこの〈デバッグビルド〉。デバッグ
ビルドはデバッグ用のいろんな機能がついてます
いろんな機能って?
例えばブレークポイントとか
え、あれってどんなアプリでもできるんじゃないの?
デバッグビルドしなきゃ、ブレークポイントは使えないの。あと TRACE()
も実はデバッグビルド専用
えっ、てことはフツーのアプリはアウトプットウィンドウに文字表示した
りできないの?
一応ね。で、こういったことができないようなビルドを〈リリースビルド〉
っていいます
えー、なんかそれって不安
でもデバッグビルドだと余分なものがいっぱい憑いてるから、実行ファイ
ルが大きくなるし、少し遅くなるし
つまりブラッシュアップってこと?
手軽なブラッシュアップ、かもね。だから、デバッグビルドで作ったプロ
グラムで入念にテストしたあと、リリースビルドでアプリを作って、公開
それがパターンってことなんだ
そういうこと。じゃ、さっそくしてみましょう。メニューの【ビルド】
−【アクティブな構成の設定】を選んで
はーい
 【プロジェクトの標準構成】というダイアログが表示される。中に
Calc - Win32 Release と Calc - Win32 Debug があり、後者が選択され
ている。
 Debug がデバッグ、 Release がリリースだよね。じゃ、 Release の方
を選んで OK っと
そしたらビルド
ビルド。あ、時間かかってる
全部別のファイルとして新しく作り直すからね
あ、終わった
そしたら、できた Calc.exe を見比べてみようか。 Calc.cpp とかがある
フォルダを開いて
メニューの【ファイルを開く】っと。あ、 Debug と Release のフォルダ
がある!
デバッグビルドしたのとリリースビルドしたのが別々に置いてあるってこ
と。両方とも開いて、 Calc.exe のサイズを比べてみて
えっとねー、 Debug が 108KB 、 Release が…… 24KB って4分の1以
下!?
こんだけ違うわけ。リリースビルドした方がいいってことが分かったで
しょ
ホントねー、これだけ違うとねー
当たり前だけど、もちろん普通のアプリとして機能するから
あ、そっか。ダブルクリック……ちゃんと計算機してる!
足し算だけだけどね
うっさいなー
じゃ、最後にちょっと難しい話
えー?
ま、軽く聞き流すくらいでいいから。メニューの【プロジェクト】−【設
定】を選んで
はーい
 【プロジェクトの設定】ダイアログが表示される。
あ、上の【設定の対象】が Win32 Release ってのになってるけど、もし
かして?
その通り。えっと右側の【C++】ページの、カテゴリ【一般】に【デバッ
グ情報】ってあるでしょ
うん、【しない】になってる
ここで【設定の対象】を Win32 Debug にすると……
あ、【エディットコンティニュー用のプログラムデータベース】とかゆー
のになった!
つまり、リリースだとデバッグ情報を作らなくて、デバッグだとなんか作
ってくれるってこと
ほー
今は簡単にデバッグとビルドって言ってるけど、ホントはこういう細かい
設定の話なんだってこと、ちょっとだけ憶えといて
ってことは、いつかこれもわかんなくちゃいけないってことなのね……

/*
    Preview Next Story!
*/
来週で最終回!
最終回じゃありません、まだまだ続きます
まだまだ先は長いのね
というわけで次回
< Version 3.25 フリーウェア、公開! >
につづく!!
ま、今の予定じゃ全150回、3年ってとこだね
ってことはきっと50年は掛かるのね!!
おい
 
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
RSSに登録
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
 
このページは、Visual C++ 6.0を用いた C++ 言語プログラミングの解説を行う#pragma twiceの一コンテンツです。
詳しい説明は#pragma twiceのトップページをご覧ください。