サイトマップ / C言語講座出入り口総目次目次:バグ対策>NDEBUGマクロとassert( )

青い直線

NDEBUGマクロとassert( )

青い直線

[整数の取り得る範囲]←このソース→[エラーメッセージ]

/* assert( ) と abort( ) */

/* 今日は、assert( )abort( ) について学びます。

    #include <assert.h>
    void assert(int expression) ;

    例:assert(expression);

    戻り値:なし

assert( ) は、assert.h の中で、マクロとして宣言されています。assert( ) は与えられた条件が、成立しているか調べ、expression の値が0ならば、標準エラー出力( stderr )にメッセージを表示して、abort( ) を呼び出し、プログラムを異常終了させますexpression の値が0以外ならば、assert( ) は、何もしません。

NDEBUG マクロ

もし、#include <assert.h> より前に、NDEBUG マクロがあると、assert( ) は、何もしません( ソースプログラム参照 )。assert( ) の出すメッセージは、expression そのものとassert( ) のあるファイル名と、その位置の行番号です。assert( ) はプログラムのデバッグに使います。

ソースプログラムは簡単です。キーボードから入力した double 型の数値の平方根を求めます。assert( ) の ( ) の中に、x >= 0 があります。x >= 0 を評価して、偽なら0に、真なら0以外の整数になります。x がマイナスの値ならば、x >= 0 は0となり、メッセージを表示し、異常終了します。

プログラムを実行し、プラスの値とマイナスの値を入力してみて、実際に、確かめて下さい。 */

/* ここからソースプログラム */

/* この下の行を有効にするとassert(  ) は実行されない */
/* #define  NDEBUG */

#include <stdio.h>
#include <math.h>      /* sqrt(  ) で必要 */
#include <assert.h>    /* assert(  ) で必要 */
#include <stdlib.h>    /* abort(  ) で必要 */

void main(void);

void main(void)
{
    double x;

    printf("数字を入力して下さい\t");
    scanf("%lf", &x);

    /* x が負ならここでプログラムが終了 */
    assert(x >= 0);

    printf("\nsqrt(%lf) = %lf\n", x, sqrt(x));
}

/* ここまでソースプログラム */

/* abort( ) について

    #include <stdlib.h>
    void abort(void);

    例:abort(  );

    戻り値:なし

abort( ) は、プログラムを異常終了させます。処理系によっては、'stdio.h' または、'process.h' をインクルードするものもあります。そのコンパイラの関数リファレンスで、確かめて下さい。 */

[整数の取り得る範囲]←このソース→[エラーメッセージ]

青い直線

/* (C) 2000- YFプロ. All Rights Reserved. */    提供:C言語講座−それ自体コンパイルできる教材を使った講座です−

青い直線

サイトマップ / C言語講座出入り口総目次目次:バグ対策>NDEBUGマクロとassert( )