- ベストアンサー
Cのmain関数の外出しした計算部分を別ファイルで読み込みたいのです
C言語でとある計算プログラムを作成しました。 mainの中でFileAを読込み、1行づつ同じ計算をFileAの最終行まで演算し、出力しています。 同じ計算をしている部分はmain関数の外で作っており、mainの中で呼び出しています。 出来上がったKeisan.cというファイルを、gccでコンパイルして、Keisan.exeというものにして、「./Keisan.exe FileA > ResultA.txt」といったコマンドで利用しています。 改修を進めていくうちにとても長いプログラムになってしまったので、main関数の外で繰り返し呼び出している部分を別のファイルにして呼び出せないものかと悩んでいます。 「Keisan.exe」から「KeisanhojoA.c(もしくは.exe?)」を呼び出して同じ計算結果としたいのですが、どうすればいいのかさっぱりです。 こういうことを解説しているwebサイト、または書籍をご存知でしたらご教示いただきたく。 今やっている処理を正式になんと言うか、また今回やりたいことはなんと呼ばれているものなのか分からないために、分かりにくい質問になってしまいましたが、よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
C言語は関数に分割することで別ファイルに分けることが出来ます。 1.たくさんの関数にmainを分割する。まず1つのソースファイルに複数の関数を入れる。 http://www.f-kmr.com/clang/clang-2.htm http://www.geocities.co.jp/SiliconValley-Cupertino/3384/EnterC2.html http://daimaru.sakura.ne.jp/c_room7.html 2.それでも関数が多すぎたら、機能単位に別のファイルに分割する。 http://www-ise3.ise.eng.osaka-u.ac.jp/miura/programLecture/lecture4.html http://www.geocities.jp/ky_webid/c/032.html
その他の回答 (2)
- php504
- ベストアンサー率42% (926/2160)
ファイルを分割したいということですね コンパイル時には呼び出す関数の戻り値と引数の型だけわかっていれば関数の実体はなくても出来ます リンク時に関数の実体をリンクできればいいです /* 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
お礼
実例付きのお陰で、分割できました。 3つ以上に分けた場合も、並べて指定することで可能でした。 ありがとうございました!
補足
実例付きでありがとうございます。 $ gcc -o Keisan Keisan.c KeisanhojoA.c このコンパイルで「Keisan.c」と「KeisanhojoA.c」の2つが合わさって「Keisan」というファイルになるわけですね? ということは3つのファイルを統合したい場合、以下のようでいいでしょうか? $ gcc -o Tougou.exe Keisan.c KeisanhojoA.c KeisanhojoB.c
- asuncion
- ベストアンサー率33% (2127/6290)
現在は、Keisan.cという1個のファイルに、 main関数や他の関数を書かれているのですか? 何という関数があって、各関数はどういう機能を持っているかを 教えていただけますか?
お礼
詳しいことを書けずに申し訳なかったです。 会社のPCを見ないとよく覚えていないというのが一番の問題なのですが・・・ せめて自分のプログラムくらい覚えているように努力します。 ありがとうございました!
補足
そうです。main関数と一緒に他の自作関数を書いています。 mainの中では、FileA(1秒毎の数値)の読込み、自作関数の呼び出し、戻り値の整理をしています。 自作関数Aで、各秒時毎数値の判定計算をしてmainに0、1を返しています。 あまり詳しいことが言えなくて申し訳ないです。
お礼
色々なサイトを教えていただき、ありがとうございます。 今回以外のことにも利用できるサイトで大変たすかりました。 ありがとうございました!
補足
たくさんのリンクありがとうございます! とても参考になります。