囲みコラム

ASSERT()マクロによる呼び出し条件チェック


リスト6.4のInitContent()メソッドには、本体の先頭に“#if DEBUG”と“#endif”で囲まれた四つの行があります。これらの行はデバッグ用に書き入れたもので、InitContent()メソッド本来の処理には必要ないものです。四つの行のそれぞれについて、その目的を説明しましょう。

まず、最初の

this->Lock();

は、その後の二行のために必要なもので、ウィンドウに対してロックをかけるものです。その次の

ASSERT(this->IsHidden());

は、InitContent()メソッドが呼び出された時に、ウィンドウが未だ画面に表示されていないことを保証するための行です。ASSERT()はSupport Kitで提供されているマクロで、引数に渡した式の値がfalseであった場合、ローレベルデバッガを起動してプログラムの実行を中断します。ANSI標準のassert()マクロとほぼ同じ働きをするものですが、それぞれのマクロの有効・無効を切り替える方法は違います。

assert()マクロはデフォルトで有効になるよう設定されており、無効にするには“NDEBUG”という記号定数を定義しないといけません。これに対し、ASSERT()マクロはデフォルトだと無効であり、“DEBUG”という記号定数の値が0以外になるよう定義された場合に限って有効になります(注6-2)。なお、ASSERT()マクロは“Debug.h”というインタフェースファイルで定義されていますが、このファイルでは他にもデバッグに便利なマクロがいくつか定義されています。どれもASSERT()と同様“DEBUG”を使って有効・無効を切り換えできますので、自分で使ってみて、それぞれの働きを確認してみて下さい。



Art of BeOS Programming
koga@stprec.co.jp