- ベストアンサー
メインルーチンとサブルーチンについて。
これについてご教授下さい。例を示していただきたいです。後、以下のURL、はなぜ、メンルーチンしか使っていないのでしょうか?ご教授下さい。 Link: http://codepad.org/Oxfd5gz9
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
関数分けが必要な理由は変数の局所化の為です sub_1に渡された変数iはsub_1でしか操作出来ません #include<stdio.h> void sub_1(int i){ printf("%d\n",++i); } int main(void){ int i = 1; printf("%d\n",i); sub_1(i); printf("%d\n",i+2); return 0; } 並列処理は同時に変数をいじられると破綻するので局所化します http://www.ncad.co.jp/~komata/c-kouza28.htm クイックソート関数も局所化しないとできません https://www.codereading.com/algo_and_ds/algo/quick_sort.html 小難しく考えないでも色んなソースを書いてれば関数分け理解できますよ
その他の回答 (7)
- shiren2
- ベストアンサー率47% (139/295)
これは量がどうのというより、単に説明用に書いたからだと思いますよ。 普通はプログラミングで、こんなコードは書きません(メインルーチンがどうの以前に、GOTO文を使わない)。 コメントを見る限り、恐らくですが、「別の言語で書かれた問題をCで書き直すとこうなるよ」というサンプルではないでしょうか。
補足
#include<stdio.h> void sub_1(int i){ printf("%d\n",++i); } int main(void){ int i = 1; printf("%d\n",i); sub_1(i); printf("%d\n",i+2); return 0; これは、どう言う意味になるのでしょうか?ご教授下さい。すみませんが。
- OK_WAVE
- ベストアンサー率17% (22/125)
ソースの書き方は人それぞれお好みでいいですよ URLはgotoを使いメイン関数で制御分けする方法です メイン関数のみで完結するなら関数分けする必要ありません ただ再帰関数や並列処理はメイン関数のみで作るのは困難です 拡張性を求められるライブラリーもメイン関数だけでは出来ません
補足
サブルーチンを使った関数分けとは、どう言うことでしょうか?ご教授下さい。すみませんが。
- asuncion
- ベストアンサー率33% (2127/6289)
>メインルーチンだけとはどういうことでしょうか? C言語でいうと、質問者さんが提示された サンプルコードのように、main関数「のみで」 処理が完結しているということです。
補足
ではなぜ今回のは、メインルーチンだけでも大丈夫なのでしょうか?ご教授下さい。すみませんが。 メインルーチンだけと言える理由は、なんでしょうか?No.1 の方は、たいした量じゃないからと言っていましたが、どのくらいの量だったら、サブルーチンを使うのでしょうか?これについても、 ご教示願います。
- asuncion
- ベストアンサー率33% (2127/6289)
- asuncion
- ベストアンサー率33% (2127/6289)
C言語ではメインルーチンやサブルーチンという用語は ほとんど使いません。すべて関数です。 以下の例では、main関数からf0, f1, f2の各関数を 呼び出しています。main関数に何でもゴチャゴチャと押し込むのは あまり適切とはいえない設計です。 呼ばれた側であるf0, f1, f2の各関数では、適当な文字列を 出力しています。 #include <stdio.h> void f0(void) { printf("hello, world!\n"); } void f1(void) { printf("Hello, World!\n"); } void f2(void) { printf("HELLO, WORLD!\n"); } int main(void) { f0(); f1(); f2(); return 0; }
補足
これをメインルーチンにするとどうなるのでしょうか?ご教授下さい。すみませんが。
- t_ohta
- ベストアンサー率38% (5238/13705)
サブルーチンと言うのは、一連の処理の中で同じ処理を繰り返す場合に、繰り返し行う処理を集約したモノです。 繰り返す回数が少なかったり内容が単純ならワザワザ集約しなくても可読性が高いので、無理に集約する必要は無いと言う事ですね。
補足
例えば、サブルーチンを使う場合はどの様な場合でしょうか?例を出していただけないでしょうか?ご教授下さい。すみませんが。
- bardfish
- ベストアンサー率28% (5029/17766)
たいした量じゃないから。
補足
#include<stdio.h> void sub_1(int i){ printf("%d\n",++i); } int main(void){ int i = 1; printf("%d\n",i); sub_1(i); printf("%d\n",i+2); return 0; これは、どう言う意味になるのでしょうか?ご教授下さい。すみませんが。