Cを少し強くつつく2ーmain関数。プログラムのメイン処理だぁ!2009-04-15 Wed 18:57
前回から引き続き一つのプログラムをつついていくピヨ♪前回で関数プロトタイプをつついたから今回はmain関数をつつくピヨ♪
この関数は一体何ものだろうか?悪戯心に火がついたので、サンプルコードを変えたピヨッ。
どこが変化したか分かるよね?早速コンパイル♪コンパイル♪ 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関数を動かすために色々な努力をしている様子が見えるピヨ♪暇な時やってみよう♪ 今回はこれでお終い♪ |
この記事のコメント__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 | インドリ #-[ 内容変更]
|
コメントの投稿 |
||
|
|
||
| 管理者だけに閲覧 | ||
|
|
||
この記事のトラックバック |
|
| 無差別に技術をついばむ鳥 |
|