ASSERT(x)
マクロがあり、それがアサートされている(リリース構成で)場合はreturn
にコールしたいと思います。 これを行うには、私がこのASSERT
を使用する関数の戻り値の型を知る必要があります。どうすればいいですか(私はC++03
、LLVM GCC 4.2
コンパイラを扱います)?マクロで関数の戻り値の型を取得する(C++)
マイassertマクロ:
#define ASSERT(x) \
if(!(x)) {
LOG ("ASSERT in %s: %d", __FILE__, __LINE__); \
return /*return_type()*/; \
}
PS:私はreturn 0;
を試してみました - コンパイラはvoid型関数のエラーを示して(と私は複雑な帰国のタイプのためにそれをしようとしなかった)、return;
場合 - 非void型関数のエラーを。
(更新...)
私はここ werewindle、ナイアーラトテップとJDV-ヤン・デ・ヴァンにお答えします。私はデバッグ設定のために標準assert
を使用します。しかし、ベータテストの後、私はまだ、最終的な顧客からのクラッシュレポートを取得し、ほとんどの場合、私は私のクラッシュ機能を変更する必要があります。
ASSERT (_some_condition_);
if (!_some_condition_) // add this return
return _default_value_;
私は私のプログラムが後でおそらくクラッシュすることがありますことを、理解し(それ以外の場合は間違いでクラッシュします現在の機能)。また、開発はiPhone向けであるため、アプリケーションを終了できません(アプリはプログラムで終了できない可能性があります)。したがって、アサーションが失敗した場合、最も簡単な方法は「自動復帰」です。
、彼らはあなたが関係なく、あなたのプログラムが持っているもののバグ動作していない続けるだけ必要があることを意味するものではありません。彼らは**あなたのアプリはそれを提出する前にバグフリーでなければならないと言っています**! –
iPhone - それはObjective-Cではなく、C++ではないですか? – codeling
例外の使用について考えましたか?非常に高レベルのtry-catchブロックを持つことができ、例外オブジェクトに組み込むことができるメッセージ( '__FILE__'と' __LINE__'によって与えられた位置と共に)を記録することができるようです。あなたは戻り値に全く興味がないようですね、そうですか? – Andre