3

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実行されません)

4

1 に答える 1

10

NDEBUGassertインクルードする前に定義した場合にのみ影響します<cassert>(または、これらのヘッダーを複数回インクルードして、依存<assert.h>の動作を変更できることに注意してください)。assertNDEBUG

特定の値に定義する必要はなく、まったく値を定義する必要もありません。

// this is OK
#define NDEBUG
于 2012-09-02T16:41:33.327 に答える