いちばん失敗した人決定戦

#defineで定数を設定する場合に、TXTなどのファイルを読み込み、読み込んだ
値を定数として設定することは可能でしょうか?
下記のようなプログラムを考えていたのですが、うまくいかなくて悩んでいます。
ご教授お願いします。


#define VARIABLE '0'
#define TMP fgetc(fopen("./test.txt","r+"))
#undef VARIABLE
#if TMP=='a'
  #define VARIABLE 'a'
#elif TMP=='b'
  #define VARIABLE 'b'
#else
  #define VARIABLE 'c'
#endif

A 回答 (4件)

#define定義はただの文字列置き換えにしかならない。


ということで……
>#if fgetc(fopen("./test.txt","r+"))=='a'
関数呼び出しはできないでしょう。
# 呼び出しできてもクローズしていませんし…。

そうなったら、既にプリプロセッサのお仕事ではありませんし。

#include "./test.txt"
で、ファイルの内容を読み込むことは可能です。
ので、./test.txtに

#define VARIABLE 'a'
とか記入しておけば、その内容を取り込むことは可能です。

もちろん、反映できるのはプリプロセッサが動作したときなので……

実行ファイルができあがった後で./test.txtの内容を書き換えて切り替えできるようにしよう。
そうすれば、再ビルドする手間掛からなくていいぢゃん!!

みたいなコトはできません。
# ので……普通にソースファイル上にdefine定義するのとあまり違いがありません。
    • good
    • 0

処理内容は プリプロセッサに行わせるものでは無いと思います。



単純にファイルを読み、値を変数にほうりこむだけで事足りると思います。
    • good
    • 0

ちなみに…たいていのコンパイラはコマンドラインでシンボル定義とか可能かと思われますので、


環境によってはMakefileなどでテキストファイルの内容でdefine定義を切り替える。
というコトは可能かも知れません。
# Visual Studioでそういうコトが可能かは不明ですが…
UNIX系であれば、configureスクリプトでそういう処理しながらMakefileを生成する。なんてことをしていても不思議ではない…でしょう。
おそらく。
# /etc/redhat-releaseの内容でパス名変えたりとか。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ファイル内容によって自動設定することを目的としていたので、
makefileでも難しそうです。手動で定義しなおすしかないようですね。
ありがとうございました。

お礼日時:2012/11/04 11:22

#include で読み込むことはできる.

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!