• ベストアンサー

分割コンパイルの#defineについて

分割コンパイルで ファイル1 #include <stdio.h> #define number 10 char string[number]; int main(void){ string[0]='a'; string[1]='b'; file_to(); return 0; } ファイル2 #include <stdio.h> #define number 10 extern char string[number]; void file_to(void){ /***何かの処理をする*****/ } って感じなんですけども、配列string の中身の値をdefineによって指定しているのですが、片方のdefineの値を変更する時、もう一つのdefineも手動で変更しています。関係するファイル数が多くなってくると大変なので、どれかのdefineの値を変化させたら自動的に他のdefineの値も変更するプログラムの組み方はありませんか? 質問がわかりにくいかも知れませんがよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • wolv
  • ベストアンサー率37% (376/1001)
回答No.1

#define 部分を mydef.h のようなファイルにまとめておき、各プログラムには、 #include "mydef.h" とすればよいです。 makeを使っている場合は、依存関係を追加したほうが楽です。例えば、a.cというファイルでmydef.hをincludeするなら、Makefileの中に a.o : mydef.h という行を追加しましょう。 蛇足ですが、<mydef.h>ではなく"mydef.h"と記述することで、システムのディレクトリーではなく、カレントディレクトリー中のファイルを探します。

Nickee
質問者

お礼

なるほど、ヘッダファイルの存在は以前から知っていたのですが、よくわからないまま、分割コンパイルに頼りきっていました。このような使い方があったのですね。ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • KOH_da
  • ベストアンサー率31% (161/506)
回答No.2

このプログラムがmaeda.cだとすると、 maeda.hというファイルを作ります。 そこには、 #define number 10 と、記述します。 そして、maeda.cには、 #include "maeda.h" と、記述して、maeda.hを取り込むようにします。 それ以外にもファイルがあって、 たとえば、それがhigashide.cとすれば、 higashide.cにも、 #include "maeda.h" と記述します。

Nickee
質問者

お礼

できました。ありがとうございました。

すると、全ての回答が全文表示されます。