サイトマップ / 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言語講座−それ自体コンパイルできる教材を使った講座です−