C

Top / C

簡易ベンチマーク

#include <unistd.h>
#include <sys/time.h>

static struct timeval g_timeval;

void init_bench()
{
	struct timezone tz;
	gettimeofday(&g_timeval, &tz);
}

void bench(const char *message)
{
	struct timezone tz;
	struct timeval old_timeval = g_timeval;

	gettimeofday(&g_timeval, &tz);

	int usec = (g_timeval.tv_sec - old_timeval.tv_sec) * 1000000
		+ g_timeval.tv_usec - old_timeval.tv_usec;
	printf("bench %10d usec: %s\n", usec, message);
}

マクロ

TRACE

#ifndef __TRACE_H__
#define __TRACE_H__

#include <stdio.h>
#include <stdlib.h>
#ifdef  _MSC_VER
#include <stdarg.h>
#endif

//	有効にする
#ifndef NDEBUG
#define __ENABLE_TRACE__
#endif


//======================================
//	デバッグ用の処理
#ifdef __ENABLE_TRACE__

//	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__)
#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); \
}

#endif	// _MSC_VER

//======================================
//	リリース時
#else	// __ENABLE_TRACE__

#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,...) ((void)0)
#define ASSERT_TRACE(condition,fmt,...) ((void)0)


#endif	// _MSC_VER
#endif	// __ENABLE_TRACE__

#endif	// __TRACE_H__

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2005-03-04 (金) 17:41:04 (4408d)