#contents

// * C
* 簡易ベンチマーク

#contents
	#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