1. ホーム
  2. c++

[解決済み] アサートへのメッセージの追加

2022-03-03 12:36:40

質問

ハロー!

assertステートメントにカスタムメッセージを追加する方法を探しています。 私はこの質問を見つけました assertでカスタムメッセージを追加しますか? が、そこではメッセージは静的なものです。私はこのようなことをしたいです。

assert((0 < x) && (x < 10), std::string("x was ") + myToString(x));

アサーションが失敗したとき、通常の出力に加えて、例えば "x was 100" のような出力が欲しいのです。

解決方法は?

ここでは運が悪かったとしか言いようがありません。最良の方法は、自分で定義することです。 assert マクロを使用します。

基本的には、このような形になります。

#ifndef NDEBUG
#   define ASSERT(condition, message) \
    do { \
        if (! (condition)) { \
            std::cerr << "Assertion `" #condition "` failed in " << __FILE__ \
                      << " line " << __LINE__ << ": " << message << std::endl; \
            std::terminate(); \
        } \
    } while (false)
#else
#   define ASSERT(condition, message) do { } while (false)
#endif

これは ASSERT マクロは、デバッグ不要のマクロ NDEBUG が定義されていない場合。

そうすると、こんな風に使うんですね。

ASSERT((0 < x) && (x < 10), "x was " << x);

を文字列化する必要がないので、あなたの使い方より少し簡単です。 "x was "x を明示的に指定すると、マクロによって暗黙のうちに行われます。