ビルド後のdefine値の取得方法 – プログラミング – Home

ビルド後のdefine値の取得方法
 
通知
すべてクリア

[解決済] ビルド後のdefine値の取得方法


ebimayo
 ebimayo
(@ebimayo)
ゲスト
結合: 19年前
投稿: 40
Topic starter  

いつもお世話になります。ebimayoです。

実現可能かどうかも分からないのですが、以下のようにdefineして

#define TEIGI 100

ビルド後(プログラム実行時)にTEIGIという文字列(文字列でなくてもいいのです
が)
から100という値を得ることは可能でしょうか?
また、可能ならその実現方法はどのようにすればいいのでしょうか?

説明が下手かなと思うので、やりたいことの例を書きます。
通常なら

int atai
atai = TEIGI;

と、書くことでataiに100が代入されると思いますが、このTEIGIをプログラムに
埋め込まず、例えばテキストボックスでTEIGIと入力した文字列から
defineした値の100を得る方法があれば知りたいです。

説明が下手で分かりにくい文章かと思いますが宜しくお願いします。

開発環境
Microsoft WindowsXP(SP2)
Microsoft Visual C++ 2005
  ダイアログベースアプリケーション(MFC)


引用未解決
トピックタグ
aharen
 aharen
(@aharen)
ゲスト
結合: 18年前
投稿: 25
 

CString str;
str.LoadString(IDS_WEB_TUTORIAL);

ではうまくいきませんでしょうか
ただしIDS_WEB_TUTORIALはもちろん一例


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

おそらく、#defineだけでは無理でしょう。

#defineされた識別子はコンパイル時には、置換が行われているため、
実行時にはもう何が#defineされていたのか、どんな識別子だったのかさえわからないと
思います。

普通は、文字列、値の「マップリスト」と言われるものを利用して値を取り出すことを
します。MFCならばCMap系を使うとか。


返信引用
aharen
 aharen
(@aharen)
ゲスト
結合: 18年前
投稿: 25
 

すみません質問を勘違いしていました


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

こーいう感じで一覧表を作っておくしかないでしょうね。
enum なんかも同じ方法で一覧を作っておく方法を取ります。

struct value_map_t {
const char* text;
int value;
};
const struct value_map_t value_map[]={
{TEIGI, TEIGI},
{FOO, FOO},
...
};

{ } の中をマクロで簡略化するともっといい。


返信引用
ebimayo
 ebimayo
(@ebimayo)
ゲスト
結合: 19年前
投稿: 40
Topic starter  

aharenさん Blueさん 回答ありがとうございます。

やはり無理ですか
CMapクラスなるものは初めて知りました。

現在は文字列と値をペアで保持して取り出す仕組みを作っていますが、
今やりたかった事がBitmapなどをリソースとして追加したときの
define値を、設定ファイルから読み込んだ文字列を元に検索して
define値を取得し、リソースを使用したいと考えていました。

このプログラムが自分の手元から離れて別の人が管理する
(誰か決まってなくいつ決まるかも分からない)状況で、リソース(Bitmap部品)
の入れ替えや追加が必要なときに、一番見落としやすい(忘れやすい)と思った
define値と設定ファイルの結びつける箇所への追加を省略できるように
出来ればいいなと思い質問しました。

出来ないとわかったので解決とさせていただきます。


返信引用
ebimayo
 ebimayo
(@ebimayo)
ゲスト
結合: 19年前
投稿: 40
Topic starter  

あっと書いてる間にもレスが

tetrapodさんありがとうございます。

一覧のようなものを作っていたのですが、上の私の書き込みの通りで
プログラム内の修正が発生した際の追加&修正忘れを未然に防ぎたいための
目的で必要でした。

質問時にここまで書いとくほうがよかったですね。すいません。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました