assert()関数の使い方の概要

2517 ワード

assertマクロのプロトタイプ定義は、条件がエラーを返すとプログラム実行が終了し、プロトタイプ定義が次のように機能します.
#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 。