#define で定義した文字列を表示

[戻る]
シュン 2006/07/31(月) 01:39:58
初めまして。
VC++歴半年の初心者です。
皆様よろしくお願いします。

質問はタイトルの通りなのですが、#defineで定義している文字列をそれに割り当てた数
字ではなく、文字列のままメッセージボックス内に表示させたいのですが、どのように
すればよろしいでしょうか?

といいますのも、現在私はあるデバイスを用いていまして、プログラム上でエラーがあ
るとそのエラーコードが数字として変数に格納されるようになっています。
例えば、
  #define  ERROR    0x00000001
とヘッダーファイルに書き込まれているとしたときに、あるコマンドdeviceopenを使用
したときにエラーが出ると、
  nRet = deviceopen
において、nRet(CHAR nRet[256]で宣言)に0x0000001がそのまま入ってしまいます。

このままでは、
  AfxMessageBox(nRet);
としても、メッセージボックスに「0x0000001」と表示されるだけです。
私の意図しているところは、メッセージボックスに「0x0000001」ではなく、「ERROR」
とdefineで定義されている文字そのものを直接出力したいと考えています。

以上、長々と質問を書いてしまいましたが、どなたか解決策がわかるかたがいらっしゃ
いましたら、ご教授いただけるとありがたく思います。
よろしくお願いいたします。

επιστημη 2006/07/31(月) 05:00:16
#include <iostream>

#define str(X) #X

#define ERROR 0x0001

int main() {
  std::cout << str(ERROR) << " = " << ERROR << std::endl;
}

PATIO 2006/07/31(月) 11:30:04
基本的に何か便利な方法でそれが実現できると言う事はないと思います。
επιστημηさんが書かれているように地道にコードに対応する
文字列を出力するように処理するしかないと思います。
コードが多岐にわたる場合は文字列に変換する為の関数でも作成すると
修正や追加が一箇所で済むので多少は幸せになれるかもしれません。

PATIO 2006/07/31(月) 11:31:49
あうあう。
επιστημηさんのは読み替えでは無かったですね。

変換用の関数でも作ってそれにコードを渡したら文字列を返すような
仕掛けでも作るしかないと思います。
(というか普通はそうすると思います)

シュン 2006/07/31(月) 12:47:39
[[解決]]
みなさんありがとうございます。
やはり別に文字列を出力させる仕組みを用意しなければいけないようですね。。。
みなさんの素早い返信に感謝します!
ありがとうございました!

古いスレッドには追加発言できません。