コンテンツにスキップ

最終更新:2026-10-12

C++ assert アサーション

著者について:

個人公式アカウント:

wechat

1.最初のアサーションの例

assertは、マクロであり、関数ではありません。

assertマクロのプロトタイプは (C)、(C++)で定義されています。その役割は、条件が誤りを返した場合にプログラムの実行を終了させることです。

NDEBUG を定義することでassertを無効化できます。ただし、ソースコードの先頭、include の前で定義する必要があります。

void assert(int expression);

コード例:assert.c

#include <stdio.h> 
#include <assert.h> 

int main() 
{ 
    int x = 7; 

    /*  Some big code in between and let's say x  
    is accidentally changed to 9  */
    x = 9; 

    // Programmer assumes x to be 7 in rest of the code 
    assert(x==7); 

    /* Rest of the code */

    return 0; 
} 
出力:
assert: assert.c:13: main: Assertion 'x==7' failed.
出力を見ると、ソースファイルや行番号など、エラーの位置が示されていることがわかります!

2.アサーションと通常のエラー処理

  • アサーションは主に、論理的に起こり得ない状況をチェックするために使われます。

たとえば、コードの実行開始前に期待される状態をチェックしたり、実行完了後に状態をチェックしたりする用途に使えます。通常のエラー処理とは異なり、アサーションは実行時に無効化されているのが普通です。

  • アサーションを無視するには、コードの先頭に次を加えます:
    #define NDEBUG          // 加上这行,则 assert 不可用
    

サンプルコード:ignore_assert.c

関連トピック

コメント