main関数

今回は、前回のソースが何故コンパイルできなかったかについてやります。
早速ですが、答えをいいます。心の準備はできましたか?
原因は「プログラムの始まりが無かったから」です。

まずは前回のソースを見直しましょう。

#include <stdio.h>

void MyFunction(void){
  printf("これはMyFunction関数の処理です\n");
}

「何もしない」という内容を持ったMyFunctionという関数が定義されています。
しかし、プログラムを実行するときにはどこから始まるのでしょうか?
「そんなの一行目からに決まってるだろ」と思うのは間違いです。

C言語では「プログラムは必ずmainという関数の一行目から始まる。」というルールがあります。
要はmain関数無しにプログラムは生産できません。
とにかく、動くプログラムを作りたければmain関数を定義しなければなりません。

ここで次のようなソースを思いつく人がいるかもしれませんが...

void main(void){
}

main関数のデータ型は int 、引数は (int argc,char **argv)
もしくは(void) と決められています。
よって正しいmain関数の定義は次のようになります。

int main(int argc,char **argv){
  return 0;
}

return 0; という一行が追加されましたが、これについては「戻り値」のところで説明します。


実際のところ、main関数のデータ型を void にしても動作します。
「main関数はint型なんだ!そんなのは間違っている!」と主張する人もいれば、
「void型で何が悪い!有名なプログラムだってvoid型だったりするぞ!」と言い張る人もいます。
まあ、「どっちが正しい」と強く主張すると喧嘩が起こる可能性がありますし、
私はそんなに強いこだわりを持っていないため、「好きなほうをお使いください」といいます。
ちなみにどちらかといえばint型派閥でしょうかね(最初に読んだ本がそうでしたから)

では、前回のプログラムを作り直して見ましょう。

#include <stdio.h>

int main(int argc,char **argv){
  printf("これはmain関数の処理です\n");
  return 0;
}

まあ、何はともあれ、上のソースは正常にコンパイルできます。
コンパイルの仕方などはそれぞれのコンパイラの説明書を参照してください。