| 前のページ | 次のページ |
|
キーワード
|
|
C言語って聞いて思い浮かべるキーワードが、コンパイラ、リンカですね。 コンパイラで変換された、オブジェクトコードは適当な単位でファイルになります。これをオブジェクトファイルと呼びます。オブジェクトファイルは単体の状態でコンピュータに実行させることができません。マウスのダブルクリックで実行できるような形にするためには、色々なライブラリ(オブジェクト)を括り付ける必要があります。そして、この括り付ける作業を行うのが、リンカです。 |
|
コンパイラ/リンカ
|
|
C言語は自分で書いたソースコードをコンパイルし、さらにオブジェクトをリンクして初めて実行できる形のファイルになります。そのため、C言語の学習にはコンパイラ、リンカ、エディタを揃える必要があります。エディタに関しては、自分のお気に入りのエディタで十分です。コンパイラ、リンカに関しては無料のものがあるため、それをインストールすれば十分です。ちなみにコンパイラ、リンカは以下のサイトで提供しているため、インストールが済んでいない方はダウンロードし、インストールしてみましょう。 |
|
main(メイン)関数
|
|
前にC言語は関数が寄せ集まったものだと説明しました。 関数が寄せ集まったはいいのですが、プログラムを実行した時、C言語は一体どの関数から動き出すのか疑問に思いませんか。 実はC言語に決まりがあり、ある特有の名前をもつ関数から動き出すのです。そして、その関数の名前は「main(メイン関数)」と言います。(設定次第で色々名前を変えれますが・・・) C言語はソースコードを書いたら、コンパイラでソースコードからオブジェクトコードに変換します。次に、リンカと言う物が複数のオブジェクトファイルやライブラリを関係付け、1つの実行ファイルを作り出します。この時、ひとつの実行ファイルを作るために使ったオブジェクトファイルには1つだけmain関数を含んでいないとエラーになってしまいます。
C言語では、上図のプロセスを得て実行形式ファイルを作成します。この時、リンカの部分に注目して下さい。オブジェクトファイルやライブラリをリンカが1つの実行形式ファイルに結合します。この時、リンカはこれらのファイルを結合して、実行形式のファイルを作成することができない場合があります。それが、赤点線で囲んだファイルの中に mainがない場合なのです。無理に実行形式のファイルを作成しようとすると、リンカはエラーを出力し、処理は中断されます。 一般的に、mainはライブラリには含めないため、オブジェクトファイルに含める必要があります。そして、オブジェクトファイルはソースファイルから作成することから、C言語を書く時は、忘れずにmainを書く必要があるのです。 |
|
main(メイン)関数の中身
|
|
はじめに1点アドバイスがあります。C言語のソースファイルを読むときは、全く意味のわからないことが書いていることがあります。C言語の学習を続けて行くと後から読めるようになるため、その時は読み飛ばすことをお勧めします。では、それでは、下のソースコードを見てください。 上記のソースコードはC言語入門編のどの書籍に出てくるような簡単なソースコードです。実行すると「C言語の初めてのソースコード」と出力します。ちょっと見てください。非常に短いプログラムではありますが、やはり、main関数がありますね。これがもし、main関数が存在しなかったら、いったいどんな動作をするのでしょうか。試しにmain → testに変更して実験してみましょう。 上記ソースコードには、main関数はありません。この状態で、コンパイルをしてみるとエラーとならずに正常にコンパイルを完了します。しかし、実行形式ファイルを作成するために、リンカでリンクしてみると、シンボルmainが存在しませんと言う内容のエラーが出力されて実行ファイルが作成されないのです。試しにmain関数を削除して実行ファイルを作って見るとよくわかると思います。ちなみに、このエラーは先ほど説明した実行形式のファイルを作成する時は、1つでもmain関数を含めなければいけないと言う規約により、エラー判定したものです。 試しに test関数以外にmain関数も書いてみましょう。上記のようにmain関数を追加し、test関数をコールしてみました。その結果、コンパイル、リンク共に正常に終了するようになりました。 このようにC言語はmain関数を必ず書かかなければ、実行形式のファイルを作成することはできません。このmain関数のようにエントリポイントとなる関数が必要なものは、C言語に限ったものではなく、コンパイルが必要な言語は、ほとんどがこのような仕組みなのです。 ポイント
エントリポイントとは、プログラムを実行した際、一番初めに実行する地点のことを言います。
|
| 前のページ | 次のページ |
