前のページ次のページ上に戻るホーム BREW C++ ライブラリ & GUI フレームワーク : SophiaFramework 3.0

20.1. 診断用マクロ

SophiaFramework で定義されている、診断用のマクロです。

これらのマクロは、TARGET_BUILD_DEBUG マクロが定義されているときのみ有効になります。 このマクロが未定義の場合は何も行いません。

マクロ 意味
TRACE デバッグ出力を行います。
ASSERT 条件が不成立の場合に、警告メッセージを出力します。
VERIFY 条件が不成立の場合に、警告メッセージを出力します。

20.1.1. TRACE マクロ

TRACE マクロは、デバッグ出力を行うためのマクロです。 TARGET_ENVIRONMENT_SIMULATOR マクロが定義されている場合は SFXHelper::dbgprintf、すなわち BREW ヘルパー関数の DBGPRINTF に置き換えられます。

また逆に、TARGET_ENVIRONMENT_SIMULATOR マクロが定義されていない場合、 TRACE マクロは空に定義され、処理に影響を与えません。

使用例

このマクロは次のように使用します。

SInt16 ComplicatedCaculation(SInt16 data);

Void Evaluate(Void)
{
  SInt16 val = 0;
  ...  // val の値が変化するような処理
  SInt16 result = ComplicatedCalculation(val);
  TRACE("result = %d (in Evaluate, Line = %d)", result, __LINE__);
  ...
}

この例では、ComplicatedCaculation の返り値とコード上での現在地を 出力ウィンドウに表示します。

[Caution] 注意事項

TARGET_ENVIRONMENT_SIMULATOR マクロが定義されていない場合、 TRACE マクロは空に定義されます。 従って、TRACE マクロの引数に代入や メンバ変数を変更する関数の呼び出しを含めた場合、 思わぬ結果を引き起こす可能性があります。

20.1.2. ASSERT マクロ

ASSERT マクロは、「必ず満たされなければならない条件」が 満たされていることを開発中に検証するために使用します。

TARGET_ENVIRONMENT_SIMULATOR マクロが定義されている場合、 ASSERT マクロは 1 つの Bool 型の引数にとり、 その引数の値が false の場合は警告メッセージとソースファイル名、 行番号を出力ウィンドウに表示します。

逆に TARGET_ENVIRONMENT_SIMULATOR マクロが定義されていない場合、 ASSERT マクロは何もしません(引数の比較も行いません)。

使用例

このマクロは次のように使用します。

// Example.cpp

SFMTYPEDEFCLASS(MyClass)
class MyClass{
public:
  Initialize(Void);
...
};

...
// ここが 4093 行目
Void Function(MyClassConstPtr obj)
{
  ASSERT(obj != null);
  obj->Initialize;
...
}
...

この例では obj が空ポインタではないことを確認しています。 仮に obj が空ポインタである場合は、出力ウィンドウに

ASSERT failed : line 4096, file 'Example.cpp'

と表示されます。

[Caution] 注意事項

TARGET_ENVIRONMENT_SIMULATOR マクロが定義されていない場合、 ASSERT マクロは空に定義されます。 従って、ASSERT マクロの引数に代入や メンバ変数を変更する関数の呼び出しを含めた場合、 思わぬ結果を引き起こす可能性があります。

また、 ASSERT マクロは引数の比較結果が偽の場合は警告メッセージを 表示するだけで、プログラムの停止は行いません。

20.1.3. VERIFY マクロ

VERIFY マクロは、「必ず満たされなければならない条件」が 満たされていることを開発中に検証するために使用します。

TARGET_ENVIRONMENT_SIMULATOR マクロが定義されている場合、 VERIFY マクロは 1 つの Bool 型の引数にとり、 その引数の値が false の場合は警告メッセージとソースファイル名、 行番号を出力ウィンドウに表示します。

逆に TARGET_ENVIRONMENT_SIMULATOR マクロが定義されていない場合、 VERIFY マクロは引数の比較のみを行います。

TARGET_ENVIRONMENT_SIMULATOR マクロが定義されていない場合に 引数の比較を行う以外、ASSERT マクロと同じです。