No.2207![]() |
プログラムをファイルごとにまとめる方法 投稿者---初心者(2004/07/02 14:19:22) |
||
コンパイラはGcc Developer Liteです。 mainとなるプログラムで #include "func1.c" #include "func2.c" #include "func3.c" .... としたとき func3に関連する外部変数を int F3; とfunc3の文頭で宣言しておいたとき func1,func2の中の関数でF3を使おうとすると "undeclared"とコンパイルエラーになってしまいます。 同様に func1のなかでfunc2,func3内の関数をコールすると コンパイルエラーになってしまいます。 コンパイラは前だけみてコンパイルしているのだと 思いますが includeする順序に関係なく各ファイル間の 外部変数を参照したり関数をコールできるように するにはどのようにすればよいか 教えてください。 |
No.2208![]() |
Re:プログラムをファイルごとにまとめる方法 投稿者---ニタチ(2004/07/02 14:35:33) |
||
こちらを参考にしてみてください。 http://homepage1.nifty.com/aok2/004/c01.html |
No.2210![]() |
Re:プログラムをファイルごとにまとめる方法 投稿者---初心者(2004/07/02 18:14:35) |
||
>こちらを参考にしてみてください。 ありがとうございました。 変数の場合はわかりました。 質問が正確ではなかったのですが 使おうとしたのは変数ではなくて(?)下記のように 設定されたマイコンのビットのADR_OFFでした。 この場合は extern xxxx 何とかけばよいのでしょうか? 色々トライしてみましたが、うまくいきません。 教えてください。 struct ADR_PIN { unsigned char B7:1; unsigned char B6:1; unsigned char B5:1; unsigned char B4_0:5; } ; #define PA_DR (*(struct ADR_PIN *)0xfffd3) #define ADR_OFF PA_DR.B5 |
No.2209![]() |
Re:プログラムをファイルごとにまとめる方法 投稿者---REE(2004/07/02 14:41:42) |
||
以下の方法がお勧めです。 1.func1.c の 外部変数、外部関数の宣言をfunc1.h ファイルに書く 2.func2,3についても同様に 3.mainとなるプログラムでの#include "func1.c"などを削除する。 4.各*.cのファイルの先頭に必要となる関数の宣言がある*.hのファイルを#includeする。 5.コンパイルする時に、4つの*.cファイルを全て指定する。 |
No.2211![]() |
Re:プログラムをファイルごとにまとめる方法 投稿者---初心者(2004/07/02 18:26:13) |
||
回答ありがとうございました。 ただ、コンパイラには >5.コンパイルする時に、4つの*.cファイルを全て指定する。 の選択機能はないようです。 無償のLite版のためか? 私の調査不足なのか? もう一度調べてみますが、もしなければ 教えていただいた方式は無理ということでしょうか? |
No.2213![]() |
Re:プログラムをファイルごとにまとめる方法 投稿者---REE(2004/07/02 19:22:16) |
||
>>5.コンパイルする時に、4つの*.cファイルを全て指定する。 >の選択機能はないようです。 >もう一度調べてみますが、もしなければ >教えていただいた方式は無理ということでしょうか? 出来ないのであれば、やめた方がいいです。 一つだけヘッダーファイルを作成して、以下の様にしたあと、 元のソースファイルの#include "func1.c"より前でincludeして下さい。 #defineは、すべてヘッダーファイルに移動 構造体・型宣言もすべてヘッダーファイルに移動 変数は、定義または宣言をヘッダーファイルに移動 関数は、プロトタイプ宣言をヘッダーファイルに書く |
No.2215![]() |
Re:プログラムをファイルごとにまとめる方法 投稿者---初心者(2004/07/02 21:08:25) |
||
>一つだけヘッダーファイルを作成して、以下の様にしたあと、 >元のソースファイルの#include "func1.c"より前でincludeして下さい。 > >#defineは、すべてヘッダーファイルに移動 >構造体・型宣言もすべてヘッダーファイルに移動 >変数は、定義または宣言をヘッダーファイルに移動 >関数は、プロトタイプ宣言をヘッダーファイルに書く 回答ありがとうございます。 教えていただいたことに私の勝手な解釈(?)で 下記のように考えてよろしいでしょうか? func1.hにfunc1.cに関係する(回答いただいた)全てを書く。 >一つだけヘッダーファイルを作成して func1,func2,func3の全てを1つにまとめてしまうと 後でわかりにくくなるとして。 同様に func2.h,func3.hを作る。 メインとなるプログラムで順序に関係なく #include "func1.h" #include "func2.h" #include "func3.h" ... このあとも順序に関係なく #include "func1.c" #include "func2.c" #include "func3.c" ... でよいでしょうか? よろしく御願いします。 |
No.2224![]() |
Re:プログラムをファイルごとにまとめる方法 投稿者---REE(2004/07/05 10:12:25) |
||
>メインとなるプログラムで順序に関係なく > >#include "func1.h" >#include "func2.h" >#include "func3.h" >... この3つの間に依存関係が無ければ大丈夫です。 >このあとも順序に関係なく >#include "func1.c" >#include "func2.c" >#include "func3.c" >... >でよいでしょうか? こちらは、大丈夫です。(そのためにヘッダファイルを作ったのですから) |
No.2216![]() |
Re:プログラムをファイルごとにまとめる方法 投稿者---YuO(2004/07/03 00:47:12) |
||
>ただ、コンパイラには >>5.コンパイルする時に、4つの*.cファイルを全て指定する。 >の選択機能はないようです。 本当にないのですか? コマンドラインから4つのファイルを全て指定したり, コンパイルのみのオプションをつけてそれぞれをコンパイルしてリンカを使ってリンクすれば, 普通はできるはずですが。 >無償のLite版のためか? Gcc Developer Liteというのはそもそもコンパイラではないようですし。 #コンパイラはGNUのgcc。 |
No.2219![]() |
Re:プログラムをファイルごとにまとめる方法 投稿者---初心者(2004/07/03 13:48:32) |
||
>Gcc Developer Lite</a>というのはそもそもコンパイラではないようですし。 >#コンパイラはGNUのgcc。 ありがとうございます。 実はそんな事もしらない初心者でした。 |
No.2225![]() |
Re:プログラムをファイルごとにまとめる方法 投稿者---ニタチ(2004/07/05 12:07:00) |
||
>ただ、コンパイラには >>5.コンパイルする時に、4つの*.cファイルを全て指定する。 >の選択機能はないようです。 私の環境(WindowsXP、Borland C++Builder 6)なら、このようにすればできます。 C:\test>bcc32 main.c func1.c func2.c func3.c |