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)しながら、に実行されるコードの完全な部分を確保します。
参考大物経験