初めて質問させていただきます。
皆様よろしくお願いいたします。
質問はタイトルの通りなのですが、例えば
#define OK 10
#define NG 20
#define ERROR 30
と定義しているとして、プログラム上で何かしらの演算結果が得られて
D = 20
という答えが最終的に得られたとします。
そのときに、SetDlgItemText関数を用いて、エディットボックスに得られた解の「20」ではなく、#defineで定義した「NG」と表示させたいのですが、どのようにすればいいのでしょうか?
演算結果を全て数字ではなく、#defineで定義したそれに対応する文字列で表示させたいと思っています。
ちなみにAPIを用いてプログラムをしております。
どなたかご教授いただければうれしく思います。
以上よろしくお願いいたします。
#define OK 10
#define NG 20
#define ERROR 30
#define str(X) #X
BOOL GetMyMessage( const int no, LPTSTR msg )
{
switch ( no )
{
case 10:
_tcscpy( msg, TEXT( str( OK ) ) );
break;
case 20:
_tcscpy( msg, TEXT( str( NG ) ) );
break;
case 30:
_tcscpy( msg, TEXT( str( ERROR ) ) );
break;
default:
return FALSE;
}
return TRUE;
}
みたいな関数をつくるとか。
これでは効率が悪いと思うのならば、
#defineだけではなく、STLのstd::mapとかを組み合わせるとか。
~~~~
訂正です。
BOOL GetMyMessage( const int no, LPTSTR msg )
{
switch ( no )
{
case OK:
_tcscpy( msg, TEXT( str( OK ) ) );
break;
case NG:
_tcscpy( msg, str( NG ) );
break;
case ERROR:
_tcscpy( msg, str( ERROR ) );
break;
default:
return FALSE;
}
return TRUE;
}
あぅ、訂正なのに、TEXTマクロが抜けてしまった。。。orz
何はともあれ、実行時に判定するのは、#defineで定義した値がいつ置換されるかを
考えれば、結構難しいと思います。
類似スレ
ビルド後のdefine値の取得方法
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200607/06070095.txt
#define OK 10
#define GOOD 10
#define NG 20
#define BAD 20
#define ERROR 30
#define UNKNOWN 30
#define RETRY 30
なんてとき、10/20/30はそれぞれどれに置換しましょうか?
…ってことに対処できないんですけど。
多分、επιστημηさんがあげられているようなパターンに
対処できる方法は無いような気がしますけれど。
#defineで定義されている内容はプリプロセッサの段階で置き換えられて
しまうわけでコンパイル時には残っていませんしねぇ。
数値から文字列を何とかしたいなら数値にユニークにしないと
引っ張りようが無いと思います。
ユニークにする為の付加情報でもあれば振り分けも可能でしょうけれど、
それも無かったら無理でしょうね。
というか、同じような質問をどこかで見たんですが、
最近こういうの流行ってでもいるんですかねぇ。
皆さん丁寧な解答ありがとうございます!
皆さんの意見を参考にしてプログラムを組んでみたいと思います。
ツイート | ![]() |