assert()関数の使い方の概要
2517 ワード
assertマクロのプロトタイプ定義は、条件がエラーを返すとプログラム実行が終了し、プロトタイプ定義が次のように機能します.
assertの役割は、計算式expressionです.値が偽(すなわち0)の場合、stderrにエラー情報を印刷し、abortを呼び出してプログラムの実行を終了します.次のプログラムリストbadptr.cを参照してください.
[root@localhost error_process]# gcc badptr.c
[root@localhost error_process]# ./a.out
a.out: badptr.c:14: main: Assertion `fp' failed.
assert()の使用を放棄した欠点は、頻繁な呼び出しがプログラムのパフォーマンスに大きく影響し、追加のオーバーヘッドを増加させることです.デバッグが終了したら、#includeを含む文の前に#define NDEBUGを挿入してassert呼び出しを無効にすることができます.サンプルコードは次のとおりです.
使用法のまとめと注意事項:
1)関数の開始時に入力パラメータの正当性を検査する.
#include
void assert( int expression );
assertの役割は、計算式expressionです.値が偽(すなわち0)の場合、stderrにエラー情報を印刷し、abortを呼び出してプログラムの実行を終了します.次のプログラムリストbadptr.cを参照してください.
#include
#include
#include
int main( void )
{
FILE *fp;
fp = fopen( "test.txt", "w" ); // ,
assert( fp ); //
fclose( fp );
fp = fopen( "noexitfile.txt", "r" ); // ,
assert( fp ); //
fclose( fp ); //
return 0;
}
[root@localhost error_process]# gcc badptr.c
[root@localhost error_process]# ./a.out
a.out: badptr.c:14: main: Assertion `fp' failed.
assert()の使用を放棄した欠点は、頻繁な呼び出しがプログラムのパフォーマンスに大きく影響し、追加のオーバーヘッドを増加させることです.デバッグが終了したら、#includeを含む文の前に#define NDEBUGを挿入してassert呼び出しを無効にすることができます.サンプルコードは次のとおりです.
#include
#define NDEBUG
#include
使用法のまとめと注意事項:
1)関数の開始時に入力パラメータの正当性を検査する.
int resetBufferSize(int nNewSize)
{
// : ,
// :nNewSize
// :
// : nNewSize<=0
assert(nNewSize >= 0);
assert(nNewSize <= MAX_BUFFER_SIZE); ...
}
2) assert , , , , :
:
assert(nOffset>=0 && nOffset+nSize<=m_nInfomationSize);
:
assert(nOffset >= 0);
assert(nOffset+nSize <= m_nInfomationSize);
3) , assert DEBUG , , , :
:
assert(i++ < 100);
, i=100, , i++ 。
:
assert(i < 100);
i++;
4)assert , 。
5) ,assert 。