サイトマップ / C言語講座>出入り口>総目次>目次:バグ対策>NDEBUGマクロとassert( )
/* 今日は、assert( ) と abort( ) について学びます。
#include <assert.h> void assert(int expression) ; 例:assert(expression); 戻り値:なし
assert( ) は、assert.h の中で、マクロとして宣言されています。assert( ) は与えられた条件が、成立しているか調べ、expression の値が0ならば、標準エラー出力( stderr )にメッセージを表示して、abort( ) を呼び出し、プログラムを異常終了させますexpression の値が0以外ならば、assert( ) は、何もしません。
もし、#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言語講座−それ自体コンパイルできる教材を使った講座です−