これまでの文章で解ってもらえているとは思いますが、関数は複数作れます。
その例を下に示します。
#include <stdio.h> int main(int argc,char **argv){ printf("これはmain関数の処理です\n"); return 0; } void MyFunction(void){ printf("これはMyFunction関数の処理です\n"); } ---------- 実行結果 ---------- これはmain関数の処理です実行結果から分かるように、main関数しか実行されません。
原因はMyFunction関数が呼ばれていないことにあります。
main関数はプログラムを実行した時に、最初に呼ばれますが、
他の関数は明示的に呼び出さない限り、勝手に実行されることはありません。
それではmain関数からMyFunction関数を呼び出す例を示します。
#include <stdio.h> int main(int argc,char **argv){ printf("これはmain関数の処理です\n"); MyFunction(); return 0; } void MyFunction(void){ printf("これはMyFunction関数の処理です\n"); }関数は 関数名(引数); とすれば、呼び出すことができます(引数はなければ空にする)
が、上のソースをコンパイルするとエラーが発生します。
そのエラーの内容はMyFunction関数が見つからないというものです。
明らかにMyFunction関数を定義しているのに、このエラーが発生する原因は、
MyFunction関数がmain関数よりも下で定義されているということにあります。
コンパイルは上から順に行われるので、main関数をコンパイルしている段階では、
MyFunction関数はまだ定義されていないというわけですね。
これの解決策は二つあります。
1つは多くの人が思い付いたのではないでしょうか?
MyFunction関数をmain関数よりも上で定義するという方法です。
では、その例を下に示します。
#include <stdio.h> void MyFunction(void){ printf("これはMyFunction関数の処理です\n"); } int main(int argc,char **argv){ printf("これはmain関数の処理です\n"); MyFunction(); return 0; } ---------- 実行結果 ---------- これはmain関数の処理です これはMyFunction関数の処理です一応これで、コンパイルは正常に完了します。
それでは次にプログラムの流れを示します。
1)OSからmain関数が呼ばれ、main関数の最初の文が実行される >printf("これはmain関数の処理です\n"); が実行 >printf関数が呼び出される 2)printf関数が終わり、main関数に復帰する 3)main関数の次の文が実行される >MyFunction(); が実行 >MyFunction関数が呼び出される 4)MyFunction関数の最初の文が実行される >printf("これはMyFunction関数の処理です\n"); が実行 >printf関数が呼び出される 5)printf関数が終わり、MyFunction関数に復帰する 6)MyFunction関数が終わり、main関数に復帰する 7)main関数の次の文が実行される >return 0; が実行 8)main関数が終わりOSに復帰する「いまさら」って感もありますが、 printf("表示させたい文字"); とは、
printf関数の呼び出しだったのです。
関数はprintf関数のようにもともと準備されているものもあります。
このような関数を「ライブラリ関数」といいます。
ちなみに "表示させたい文字" は、引数となっています。
もう、忘れたかもしれませんが、もう1つの解決策は後にします。
まあ、そのころには、忘れていてもかまいませんが。