目次 - SDL 3.0 API(機能別) - アサーション - SDL_enabled_assert

SDL_enabled_assert

アサーションが無効のとき使用されるマクロ

ヘッダ

SDL3/SDL_assert.h

構文

#define SDL_enabled_assert(condition) \
    do { \
        while ( !(condition) ) { \
            static struct SDL_AssertData sdl_assert_data = { false, 0, #condition, NULL, 0, NULL, NULL }; \
            const SDL_AssertState sdl_assert_state = SDL_ReportAssertion(&sdl_assert_data, SDL_FUNCTION, SDL_ASSERT_FILE, SDL_LINE); \
            if (sdl_assert_state == SDL_ASSERTION_RETRY) { \
                continue; /* go again. */ \
            } else if (sdl_assert_state == SDL_ASSERTION_BREAK) { \
                SDL_AssertBreakpoint(); \
            } \
            break; /* not retrying. */ \
        } \
    } while (SDL_NULL_WHILE_LOOP_CONDITION)

引数

boolconditionテストの対象のブール値

詳細

このマクロはアプリケーションから直接使用することを意図していないが, SDL_assertが有効のとき挿入される.

do {} while(0)は次のような「ぶらさがりelse(dangling-else)」の問題を避けるために存在する:

if (x) SDL_assert(y); else blah();

...do/whileがなければ, "else"はマクロの"if"と結びついてしまう. このマクロでは必要最小限の処理(ループ, 静的変数, ブレイクポイント)のみを行おうとするが, これが高負荷になる場合はSDL_ReportAssertion()を使用すること.

スレッドセーフ

このマクロはどのスレッドからも安全に呼べる.

バージョン

SDL 3.2.0以降

SDL Wikiへのリンク

SDL_enabled_assert - SDL Wiki