C++ Primer はそれを言います
assert の動作は、NDEBUG という名前のプリプロセッサ変数のステータスによって異なります。
#define
定義する を提供することで、デバッグを「オフ」にすることができますNDEBUG
define が提供されると、アサートが実行されないことが私の期待です。
#define NDEBUG TRUE
int main (int argc, char const *argv[])
{
assert(argc==0); // checked
return 0;
}
この例では、が定義されているassert
ときに、ステートメントがチェックされるのはなぜですか? NDEBUG
(私が間違っていたら訂正してください。しかし、それが何を定義するかは問題ではありませんよね?)
-DNDEBUG
フラグを使用してコマンドラインから実行すると、すべてが期待どおりに機能します(assert
実行されません)