1. ホーム
  2. c++

[解決済み】assert関数とは何ですか?

2022-04-01 05:22:47

質問

OpenCVのチュートリアルを勉強していたら assert という関数がありますが、これは何をするものですか?

どのように解決するのですか?

assert は、引数が偽であることが判明した場合、プログラムを終了させます (通常、assert 文を引用したメッセージを表示します)。これはデバッグ時に、予期せぬ事態が発生した場合にプログラムが失敗することをより明確にするためによく使われます。

例えば

assert(length >= 0);  // die if length is negative.

また、このように失敗したときに表示される、より情報量の多いメッセージを追加することもできます。

assert(length >= 0 && "Whoops, length can't possibly be negative! (didn't we just check 10 lines ago?) Tell jsmith");

その他、こんな感じ。

assert(("Length can't possibly be negative! Tell jsmith", length >= 0));

リリース (非デバッグ) ビルドの場合は assert ステートメントを定義することで NDEBUG マクロを、通常はコンパイラ・スイッチで指定します。このことから、プログラムには 決して は、アサートマクロの実行に依存する。

// BAD
assert(x++);

// GOOD
assert(x);    
x++;

// Watch out! Depends on the function:
assert(foo());

// Here's a safer way:
int ret = foo();
assert(ret);

プログラムが abort() を呼び出すことと、何も保証されていないことの組み合わせから、アサートは開発者が想定していることをテストするためにのみ使用されるべきです。