プロが教える店舗&オフィスのセキュリティ対策術

C言語でとある計算プログラムを作成しました。

mainの中でFileAを読込み、1行づつ同じ計算をFileAの最終行まで演算し、出力しています。
同じ計算をしている部分はmain関数の外で作っており、mainの中で呼び出しています。

出来上がったKeisan.cというファイルを、gccでコンパイルして、Keisan.exeというものにして、「./Keisan.exe FileA > ResultA.txt」といったコマンドで利用しています。

改修を進めていくうちにとても長いプログラムになってしまったので、main関数の外で繰り返し呼び出している部分を別のファイルにして呼び出せないものかと悩んでいます。
「Keisan.exe」から「KeisanhojoA.c(もしくは.exe?)」を呼び出して同じ計算結果としたいのですが、どうすればいいのかさっぱりです。

こういうことを解説しているwebサイト、または書籍をご存知でしたらご教示いただきたく。
今やっている処理を正式になんと言うか、また今回やりたいことはなんと呼ばれているものなのか分からないために、分かりにくい質問になってしまいましたが、よろしくお願いいたします。

A 回答 (3件)

現在は、Keisan.cという1個のファイルに、


main関数や他の関数を書かれているのですか?

何という関数があって、各関数はどういう機能を持っているかを
教えていただけますか?

この回答への補足

そうです。main関数と一緒に他の自作関数を書いています。

mainの中では、FileA(1秒毎の数値)の読込み、自作関数の呼び出し、戻り値の整理をしています。
自作関数Aで、各秒時毎数値の判定計算をしてmainに0、1を返しています。

あまり詳しいことが言えなくて申し訳ないです。

補足日時:2009/05/22 19:16
    • good
    • 0
この回答へのお礼

詳しいことを書けずに申し訳なかったです。

会社のPCを見ないとよく覚えていないというのが一番の問題なのですが・・・

せめて自分のプログラムくらい覚えているように努力します。

ありがとうございました!

お礼日時:2009/05/26 20:46

C言語は関数に分割することで別ファイルに分けることが出来ます。



1.たくさんの関数にmainを分割する。まず1つのソースファイルに複数の関数を入れる。
http://www.f-kmr.com/clang/clang-2.htm
http://www.geocities.co.jp/SiliconValley-Cuperti …
http://daimaru.sakura.ne.jp/c_room7.html

2.それでも関数が多すぎたら、機能単位に別のファイルに分割する。
http://www-ise3.ise.eng.osaka-u.ac.jp/miura/prog …
http://www.geocities.jp/ky_webid/c/032.html

この回答への補足

たくさんのリンクありがとうございます!

とても参考になります。

補足日時:2009/05/22 19:14
    • good
    • 0
この回答へのお礼

色々なサイトを教えていただき、ありがとうございます。

今回以外のことにも利用できるサイトで大変たすかりました。

ありがとうございました!

お礼日時:2009/05/26 20:44

ファイルを分割したいということですね


コンパイル時には呼び出す関数の戻り値と引数の型だけわかっていれば関数の実体はなくても出来ます
リンク時に関数の実体をリンクできればいいです
/* Keisan.c */
int Keisanhojo(int);
int main(int argc, char**argv)
{
int a, b = 0;
a = Keisanhojo( b );
return 0;
}
-------------------
/* KeisanhojoA.c */
int Keisanhojo(int var)
{
return var * 2;
}

$ gcc -o Keisan Keisan.c KeisanhojoA.c

この回答への補足

実例付きでありがとうございます。

$ gcc -o Keisan Keisan.c KeisanhojoA.c
このコンパイルで「Keisan.c」と「KeisanhojoA.c」の2つが合わさって「Keisan」というファイルになるわけですね?

ということは3つのファイルを統合したい場合、以下のようでいいでしょうか?
$ gcc -o Tougou.exe Keisan.c KeisanhojoA.c KeisanhojoB.c

補足日時:2009/05/22 19:10
    • good
    • 0
この回答へのお礼

実例付きのお陰で、分割できました。

3つ以上に分けた場合も、並べて指定することで可能でした。

ありがとうございました!

お礼日時:2009/05/26 20:43

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