VC++を使用しています。リリースモードではassert(false)
無視?
Brian R. Bondy
質問する
26400 次
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 の場合、何が起こるかは未定義です。
于 2008-11-07T01:15:01.833 に答える