アットウィキロゴ

マクロを使ったデバッグプリント管理

//マクロを使ったデバッグプリント管理
 
/*
プログラムの動作を確認するのにprintを使うと思います。
でも、リリースプログラムにprintを残したくない。
しかし、手動でprint文を消して回るのは面倒だと言うときに
*/
 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
/*
	デバッグ出力するか否かを決めるコンパイルスイッチ
	ファイルが複数であれば、全体でインクルードするヘッダに置くなどする。
*/
#define _ENABLE_DEBUG_PRINT
 
typedef enum _DebugMessage{
	 DEBUG_MESSAGE_NO_PROBLEM
	,DEBUG_MESSAGE_ERROR
}DebugMessage;
 
#ifdef	_ENABLE_DEBUG_PRINT
void printDebugMessage( DebugMessage message )
{
	/*
		出力文字列のメンテのために、ファイルをあちこち探し回るのが嫌なので
		文字列を保持する箇所をまとめてあります。
		呼び出し元を探すときは、DebugMessage型の列挙型で検索します。
		小さなファイルであれば、こんな面倒なことしなくても良いかと思います。
	*/
	switch(message)
	{
		case DEBUG_MESSAGE_NO_PROBLEM:
			printf( "No Problem.\n" );
			break;
		case DEBUG_MESSAGE_ERROR:
			printf( "Error happned.\n" );
			break;
		default:
			printf( "Case not defined.\n" );
			break;
	}
}
#else	/* _ENABLE_DEBUG_PRINT */
 
/*
	_ENABLE_DEBUG_PRINTが定義されていないとき、この空マクロで置き換えられる。
	printDebugMessage関数の未定義で怒られることもなければ、
	デバッグメッセージ関数を消さなくてもメッセージを出力しないようにもなる。
*/
#define	printDebugMessage( mes )
 
#endif	/* _ENABLE_DEBUG_PRINT */
 
int main( void )
{
	unsigned int value;
 
	srand( (unsigned)time( NULL ) );
	value = rand();
 
	if( (value%2) != 0 ){//あんまりエラーが出ないので確率を1/3にする
		printDebugMessage( DEBUG_MESSAGE_NO_PROBLEM );
	}else{
		//0除算とかやると困るので
		printDebugMessage( DEBUG_MESSAGE_ERROR );
	}
 
	printf( "value : %d\n", value%2 );
 
}
 
最終更新:2011年08月02日 00:46