- 追加された行はこの色です。
- 削除された行はこの色です。
[[FrontPage]]
* C
// * C
#contents
** マクロ
* マクロ
*** TRACE
** TRACE
#ifndef __TRACE_H__
#define __TRACE_H__
// リリース時はコメントアウト
#define __DEBUG
// VCの時
//#define __VC
#include <stdio.h>
#include <stdlib.h>
#ifdef _MSC_VER
#include <stdarg.h>
#endif
// 有効にする
#ifndef NDEBUG
#define __ENABLE_TRACE__
#endif
//======================================
// デバッグ用の処理
#ifdef __DEBUG
#ifdef __ENABLE_TRACE__
#ifdef __VC
#define TRACE(fmt,option) fprintf(stderr,fmt,option)
#else
// ASSERT
#define ASSERT(condition) \
if (!(condition)) {\
fprintf(stderr,"%s %d: assertion failed ! %s\n",__FILE__,__LINE__,#condition); \
exit(-1); \
}
//--------------------------------------
// VC++
#ifdef _MSC_VER
// TRACE
#define TRACE _tracemacro_trace
inline void _tracemacro_trace(const char *format, ...)
{
va_list va;
va_start(va, format);
vfprintf(stderr, format, va);
va_end(va);
}
// ASSERT_TRACE
/*
condition ファイル名 行表示ができない
*/
#define ASSERT_TRACE _tracemacro_assert_trace
inline void _tracemacro_assert_trace(int condition, const char *format, ...)
{
if (condition) return;
va_list va;
va_start(va, format);
fprintf(stderr,"assertion failed !\n");
vfprintf(stderr, format, va);
va_end(va);
exit(-1);
}
//--------------------------------------
// それ以外
#else // _MSC_VER
#define TRACE(fmt,...) fprintf(stderr,fmt,##__VA_ARGS__)
#endif
#define ASSERT_TRACE(condition,fmt,...) \
if (!(condition)) {\
fprintf(stderr,"%s %d: assertion failed ! %s\n",__FILE__,__LINE__,#condition); \
fprintf(stderr,fmt,##__VA_ARGS__); \
exit(-1); \
}
#else
#endif // _MSC_VER
//======================================
// リリース時
#else // __ENABLE_TRACE__
#ifdef __VC
#define TRACE(fmt,option)
#define ASSERT(condition) ((void)0)
//--------------------------------------
// VC++
#ifdef _MSC_VER
#define TRACE if(1);else _tracemacro_null_func
#define ASSERT_TRACE if(1);else _tracemacro_null_func
inline void _tracemacro_null_func(...)
{
}
//--------------------------------------
// それ以外
#else
#define TRACE(fmt,...)
#endif
#endif
#define TRACE(fmt,...) ((void)0)
#define ASSERT_TRACE(condition,fmt,...) ((void)0)
#endif //__TRACE_H__
#endif // _MSC_VER
#endif // __ENABLE_TRACE__
#endif // __TRACE_H__