BOOST_ASSERT(expr)
#include <boost/assert.hpp> int main(){ BOOST_ASSERT(false); int* ptr = NULL; BOOST_ASSERT(ptr != NULL); return 0; }
内部で assert を呼んでいるだけなので、使い方は通常の assert と同じです。
拡張機能として、BOOST_ASSERT の処理をフックすることが出来ます。
#include <iostream> #define BOOST_ENABLE_ASSERT_HANDLER // include 前に定義する #include <boost/assert.hpp> namespace boost{ // ユーザ側で定義する関数 void assertion_failed( char const * expr, char const * function, char const * file, long line){ std::cout << "failed!!" << std::endl; std::cout << expr << std::endl; std::cout << function << std::endl; std::cout << file << std::endl; } } // namespace boost int main(){ int* ptr = NULL; BOOST_ASSERT(ptr != NULL); return 0; }
[出力]
failed!! ptr != NULL int __cdecl main(void) \boost_assert\main.cpp
assert.hpp の include 前に BOOST_ENABLE_ASSERT_HANDLER を定義することで、ユーザ側で用意した、boost::assertion_failed 関数が呼ばれるようになります。
こっちだと関数名も取得することが出来ます。
デバッグ時に assert で処理を中断して欲しくないような場合はこっちを使っておいたほうがよさそうですね。
[boost]
ver 1.45.0