無差別に技術をついばむ鳥

情報処理技術全般を気まぐれにつつくゆるいブログです

Cを少し強くつつく2ーmain関数。プログラムのメイン処理だぁ!

前回から引き続き一つのプログラムをつついていくピヨ♪前回で関数プロトタイプをつついたから今回は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関数を動かすために色々な努力をしている様子が見えるピヨ♪暇な時やってみよう♪
今回はこれでお終い♪
別窓 | C | コメント:2 | トラックバック:0 | ∧top | under∨
<<書籍をつつく5−インドリ流読書術。脳内インデックスを作ろう♪ | 無差別に技術をついばむ鳥 | 書籍をつつく101−C++テンプレートテクニック。期待大の書籍。>>

この記事のコメント

__tmainCRTStartup(Cから見ると'_'1個減る)をステップインで実行する方法も記述してほしかったです。
F11でデバッガを起動させてもいきなりmainまで行っちゃいます(´・ω・`)

あと、mainまで色々やるのはランタイムライブラリのスタートアップコードだと思いますけど、それも「VC」と書いているものの中に含まれるのでしょうか?
2009-04-16 Thu 13:37 | URL | あんどちん #-[ 内容変更]
> __tmainCRTStartup(Cから見ると'_'1個減る)をステップインで実行する方法も記述してほしかったです。
> F11でデバッガを起動させてもいきなりmainまで行っちゃいます(´・ω・`)

済みません勘違いでした。
VSでは出来そうにありませんね・・・
やるとするならば、OllyDbgあたりを使わないと駄目っぽいです。
でもこれではあんまりなので、ソースファイルの場所を書きます。
この関数は、
任意の場所Microsoft Visual Studio 9.0VCcrtsrc
のcrtexe.cにあります。
この場所にはほかにも色々なファイルがあって楽しいです♪
2009-04-17 Fri 09:11 | URL | インドリ #-[ 内容変更]
∧top | under∨

コメントの投稿

 

管理者だけに閲覧
 

この記事のトラックバック

∧top | under∨
| 無差別に技術をついばむ鳥 |