31

VC++を使用しています。リリースモードではassert(false)無視?

4

6 に答える 6

32

リリース モードでのコンパイルに NDEBUG の定義が含まれる場合は、はい。

アサート (CRT)を参照

于 2008-11-06T22:07:25.707 に答える
7

IIRC、assert(x) は、Visual Studio のリリース ビルドの標準である NDEBUG が定義されている場合に何も評価されないマクロです。

于 2008-11-06T22:05:27.393 に答える
6

アサート マクロ (少なくとも通常はマクロ) は、通常、リリース コードで何もしないように定義されています。デバッグ コードでのみトリガーされます。そうは言っても。私は、独自の assert マクロを定義した場所で作業しており、デバッグ モードとリリース モードの両方でトリガーされました。

関数の前提条件など、false になることが「決して」ない条件には assert を使用するように教えられました。

于 2008-11-06T22:07:19.857 に答える
2

NDEBUG が定義されている場合のみだと思います (Visual C++ アプリの場合は既定で定義されます)。

于 2008-11-06T22:05:40.530 に答える
1

assert の正確な動作に頼りすぎるのは間違いだと思います。「assert(expr)」の正しいセマンティクスは次のとおりです。

  • 式 expr は評価される場合と評価されない場合があります。
  • expr が true の場合、実行は通常どおり続行されます。
  • expr が false の場合、何が起こるかは未定義です。

詳細はhttp://nedbatchelder.com/text/assert.htmlをご覧ください

于 2008-11-07T01:15:01.833 に答える