アサーションC - 梱包アサート

Cコードは、多くの場合、エラー処理します。コールアサート、システムが出力団結ASSERTています。私たちは梱包アサートを所有する必要があるので、出力にあなたは詳細な情報が欲しい当社

 

#include <stdio.h>
//#undef  _EXAM_ASSERT_TEST_    //禁用
#define  _EXAM_ASSERT_TEST_   //启用
#ifdef _EXAM_ASSERT_TEST_     //启用断言测试
	void assert_report( const char * file_name, const char * function_name, unsigned int line_no )
	{
		printf( "\n[EXAM]Error Report file_name: %s, function_name: %s, line %u\n", 
			 file_name, function_name, line_no );
		abort();
	}
	#define  ASSERT_REPORT( condition )       \
	do{       \
	if ( condition )       \
	NULL;        \
	else         \
	assert_report( __FILE__, __func__, __LINE__ ); \
	}while(0)
#else // 禁用断言测试 
	#define ASSERT_REPORT( condition )  NULL 
#endif /* end of ASSERT */

{}行いながら(0);有効論理構造自体の衝撃ASSERT_REPORTマクロコールを防止することができるステートメント。次のコード

#ifdef _EXAM_ASSERT_TEST_     //启用断言测试
	void assert_report( const char * file_name, const char * function_name, unsigned int line_no )
	{
		printf( "\n[EXAM]Error Report file_name: %s, function_name: %s, line %u\n", 
			 file_name, function_name, line_no );
		abort();
	}
	#define  ASSERT_REPORT( condition )       \
	if ( condition )       \
	NULL;        \
	else         \
	assert_report( __FILE__, __func__, __LINE__ );
#else // 禁用断言测试 
	#define ASSERT_REPORT( condition )  NULL 
#endif /* end of ASSERT */


#define printf_define()\
	printf("one line!\n");\
	printf("two line!\n");


int main(int argc, char *argv[])
{
	int i = 0;
	
	if(1 == i)
		printf_define();
		
		|
		拆开宏带入
		|
		
	if(1 == i)
		printf("one line!\n");
	printf("two line!\n");
	
	
}

どのような問題を確認するには?聖歌に自体にASSERT_REPORT論理構造を破壊しました。;唯一のprintf(「!2ライン\ N-」)を実行するために
、{} DI(0)しながら、に実行されるコードの完全な部分を確保します。

 

参考大物経験

公開された22元の記事 ウォンの賞賛9 ビュー8823

おすすめ

転載: blog.csdn.net/ljm_c_bok/article/details/88783695