Part2では,C言語のプログラムを作成し,実行可能な形式に変換する手順を見ていきます。プログラムがどのようにして動いているのかを知ることで,プログラミングに関するより深い知識を得ることができるでしょう。
図1は,「日経ソフトウエアは毎月24日発売です」という文字列を表示するC言語のプログラムです。ファイル名はtest.c。拡張子が「.c」になります。
C言語のプログラムは,ソースコードをファイルに保存した後,「コンパイル」と「リンク」という作業をして,実行可能なファイル(「実行ファイル」と呼びます)を生成しないと動きません。コンパイルやリンクには「コンパイラ」というソフトを利用します。図1のプログラムをコンパイルしてリンクすると,「test.exe」と「test.obj」というファイルができあがります。test.exeが実行ファイルです。
test.exeをメモ帳で開いてみてください。おかしな文字がウィンドウいっぱいに出てきますね(図2)。
これは,コンピュータが理解できる命令の集まりです。実は,コンピュータはC言語のプログラムのソースコードをそのまま理解して実行することができません。いったんコンピュータが理解できる言語(「機械語」と呼びます)に変換してやる必要があります。このための作業が先ほどのコンパイルとリンクなのです。
実行ファイルには機械語の命令が詰まっている
ソースコードをコンパイルすると「オブジェクト・ファイル」ができます(前述のtest.objです)。これは,ソースコードの内容を機械語に変換したものですが,実はこれだけでは実行可能なプログラムにはなりません。
図1のソースコードにprintfという命令があります。これはカッコ内のデータをディスプレイに出力せよという命令ですが,この命令を実行するためには,プログラム本体以外に,コンパイラのメーカーが提供するプログラム(「関数ライブラリ」と呼びます)が別途必要になります。リンクによってプログラム本体のオブジェクト・ファイルと,関数ライブラリのオブジェクト・ファイルをまとめると,実行可能なファイルができあがるという仕組みです(図3)。リンクを実行するソフトのことを「リンカー」と呼びます。リンカーは通常,コンパイラとして一緒に提供されています。
アセンブリ言語を利用すれば実行ファイルの中身を理解できる
機械語はわけのわからない文字の羅列のように思えますが,もちろん,でたらめが書いてあるわけではありません。コンピュータの心臓部であるCPUが理解できる2進数として表された機械語のプログラムをむりやりテキスト・ファイルとして表示させたので,図2のようになったのです。
では,機械語のプログラムが何をしているのかを知る方法はないのでしょうか。実は,機械語の命令と一対一に対応する命令体系を備えたプログラミング言語があります。「アセンブリ言語」です(図4)。