Cを少し強くつつく2ーmain関数。プログラムのメイン処理だぁ!
この関数は一体何ものだろうか?悪戯心に火がついたので、サンプルコードを変えたピヨッ。
int printf(const char *, ...);
int ピヨ♪( void )
{
printf ( "ピヨッと学習開始♪" );
return 0;
}
どこが変化したか分かるよね?早速コンパイル♪コンパイル♪
cl /TC /Wall HelloWrold.c
LIBCMT.lib(crt0.obj) : error LNK2019: 未解決の外部シンボル _main が関数 ___tmainCRTStartup で参照されました。
HelloWorld.exe : fatal error LNK1120: 外部参照 1 が未解決です。
結構怒られたピヨォorz。えっと、エラーについて簡単に説明すると、 main関数があると思ったのにぃ。なければリンクできないわ!という風な内容のエラーピヨ。こんなエラーが何故出るのかというと、 main関数から始めるのがお約束だからなんだ。
コンパイラといえども無からEXEファイルを生成できるわけはないピヨ。というのも、今回はないけど複数のプログラムファイルがある時、どこから処理を開始していいのか分からないんだ。それに実は、普通の開発者からは見えないけど、コンパイラがもっと色々仕事をしているピヨ。その仕事の為にお約束が必要というわけさ。だから皆は素直に、影で努力しているVCちゃんをいたわってmain関数をちゃんと定義しよう♪
これでmain関数を定義するの大まかな理由が分かったよね?えっ___tmainCRTStartup関数が気になる?そんな好奇心が旺盛な人は VSでステップイン実行をしてみよう♪そうすれば、VCちゃんがmain関数を動かすために色々な努力をしている様子が見えるピヨ♪暇な時やってみよう♪
今回はこれでお終い♪