トップページ
ひらく | たたむ | ページトップ
↓マウスで反転選択した文字を検索
VisualStudio
   
ページ内検索 ページ外検索
検索したい文字を入力して
ENTERを押すと移動します。
\n
[ トップページ ]
[ ____CommandPrompt ] [ ____JScript ] [ ____MySQL ] [ ____Cygwin ] [ ____Java ] [ ____Emacs ] [ ____Make ] [ ____Perl ] [ ____Python ] [ ____OpenGL ] [ ____C# ] [ ____StyleSheet ] [ ____C++ ] [ ____Winsock ] [ ____Thread ] [ ____VisualStudio ] [ ____C ] [ ____Win32API ] [ ____Lua ] [ ____PhotoShop ]
ヘッダ検索
___

■ アサート(Assert)


    assert は ANSI C 標準マクロとして assert.h に定義されている。
    VisualStudio 環境では, Console アプリケーションは stderr に出力されて
    GUI アプリケーションでは メッセージボックスが出力される。

    POINT
      1つのアサートに対して1つのチェックをすること。
      assert( p != NULL );

      // これでは どちらのチェックに失敗したか不明。
      assert( p != NULL && cnt > 0 );
自前でマクロを再定義しておくと便利。 デバッグしやすいように、できるだけ情報( 式, メッセージ, ファイル、行 )を出力しておく。 do - while(0) をするのは if() assert() とあった場合の対策。
    void assertmessage( const char *exp, const char *msg, const char *file, int line )
    {
      printf("ASSERT FAIL: MESSAGE[%s] EXP[%s] FILE[%s] LINE[%d]", msg, exp, file, line );
    }

    #undef assert

    #define assert( cond, msg )                       \
    do {                                          \
          if ( !(cond) ) {                                    \
            assertmessage( #cond, msg, __FILE__, __LINE__ ); \
            DebugBreak();                             \
          }                                           \
        } while (0)
デバッグ以外のときはアサートは無効にする。
    #ifdef _DEBUG
    # define  assert( x ) do{ }while(0)
    #else
    # define  assert( x )
    #endif
___

■ _ASSERT(_ASSERTE)

assert は ANSI C 標準マクロであり, _ASSERT, _ASSERTE は VisualStudio 固有のアサートマクロ。 _ASSERTE は Expression(アサート式)を表示してくれるため、こちらの方がデバッグ時に役にたつ。
    #include< crtdbg.h> 

    _ASSERTE( !"test"  );

マクロの展開結果を見てみると、 ファイル名, 行, 式が _CrtDbgReport() に渡されていることがわかる。
    cl /D"_DEBUG" /P test.cpp


    (void) ((!!((!"test"))) || (1 != _CrtDbgReportW(2, L"test.cpp", 79, 0, L"!\"test\"")) || (__debugbreak(), 0));

















NINJAIDX 15