アサーション (C++をもう一度)
[履歴] (2014/12/16 04:26:50)
最近の投稿
注目の記事

サンプルコード

#include <iostream>
using namespace std;

// #define NDEBUG // ← Noデバッグモード (リリース時など) にしておくと
#include <cassert> // assert() がすべて無視されます

int main() {
    int n = 0; // としておくと
    int m = 10;

    assert(n != 0); // 期待通りアサーションに失敗します

    cout << m / n << endl;

    return 0;
}

「#define NDEBUG」はコンパイラの引数で代用できます。

g++ -DNDEBUG -Wall main.cpp
(-DVALUE で #define VALUE と同じ状況を実現できます)

いずれにせよ、assert() はリリース時には無視されてコンパイルされるため、例えばユーザからの標準入力を assert() するのは避けるべきです。静的なものに対してのみ使用しましょう。

関連ページ
    サンプルコード集 引数のないマクロ #include <iostream> using namespace std; #define EPS (1e-7) #define INF 1e9 int main() { cout << EPS << endl; cout << INF << endl; return 0; }