- ベストアンサー
[C/C++]プリプロセッサのファイル読み込み
- #defineで定数を設定する場合に、TXTなどのファイルを読み込み、読み込んだ値を定数として設定することは可能でしょうか?
- プリプロセッサのファイル読み込みに関して、TXTなどのファイルを読み込み、その値を定数として設定する方法を知りたいです。
- [C/C++]のプリプロセッサを使用して、ファイルから値を読み込んで定数に設定する方法について教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#define定義はただの文字列置き換えにしかならない。 ということで…… >#if fgetc(fopen("./test.txt","r+"))=='a' 関数呼び出しはできないでしょう。 # 呼び出しできてもクローズしていませんし…。 そうなったら、既にプリプロセッサのお仕事ではありませんし。 #include "./test.txt" で、ファイルの内容を読み込むことは可能です。 ので、./test.txtに #define VARIABLE 'a' とか記入しておけば、その内容を取り込むことは可能です。 もちろん、反映できるのはプリプロセッサが動作したときなので…… 実行ファイルができあがった後で./test.txtの内容を書き換えて切り替えできるようにしよう。 そうすれば、再ビルドする手間掛からなくていいぢゃん!! みたいなコトはできません。 # ので……普通にソースファイル上にdefine定義するのとあまり違いがありません。
その他の回答 (3)
- 中村 拓男(@tknakamuri)
- ベストアンサー率35% (674/1896)
処理内容は プリプロセッサに行わせるものでは無いと思います。 単純にファイルを読み、値を変数にほうりこむだけで事足りると思います。
- Wr5
- ベストアンサー率53% (2173/4061)
ちなみに…たいていのコンパイラはコマンドラインでシンボル定義とか可能かと思われますので、 環境によってはMakefileなどでテキストファイルの内容でdefine定義を切り替える。 というコトは可能かも知れません。 # Visual Studioでそういうコトが可能かは不明ですが… UNIX系であれば、configureスクリプトでそういう処理しながらMakefileを生成する。なんてことをしていても不思議ではない…でしょう。 おそらく。 # /etc/redhat-releaseの内容でパス名変えたりとか。
- Tacosan
- ベストアンサー率23% (3656/15482)
#include で読み込むことはできる.
お礼
回答ありがとうございます。 ファイル内容によって自動設定することを目的としていたので、 makefileでも難しそうです。手動で定義しなおすしかないようですね。 ありがとうございました。