Linux 上で C言語によるプログラムの作成と実行を行う。 プログラムの内容についての理解は置いておいて、 プログラムの作成を体験することから始めよう。
ここでの説明では、C言語 のプログラム作成・実行環境である「gcc」が 既にインストールされていることとする (Linux には通常 gcc が含まれている) 。 また、作業用のディレクトリは ~/c-practice ディレクトリとして説明する。 (~/c-practice と異なる場合、それぞれの環境に応じて各自読み替えること。)
プログラムの作成と実行は次のようなステップを踏むことになる。
- プログラムの作成
Emacs などを用い、テキスト形式でプログラムを作成する。 テキスト形式で書かれたプログラムのことを「ソースコード (source code) 」と呼ぶことがある。
- コンパイル
ソースコードはコンピュータ上で直接実行することができない。 プログラムの実行に先立ち、 コンピュータが理解できる形式に変換する必要がある。 この変換を「コンパイル (compile) 」と呼び、 変換を行うソフトウェアを「コンパイラ (compiler) 」と呼ぶ。 具体的には gcc コマンドでプログラムをコンパイルする。
- デバッグ
プログラムに誤りがあった場合、コンパイラはエラーを報告する。 エラーが発生した場合、エラーメッセージに従い ソースコードを修正し再度コンパイルを行う。
- 実行
コンパイルされたプログラムを実行する。 具体的には、プログラムのコンパイル結果のファイルをコマンド入力として直接指定する。
まず、以下のようなコマンドで ~/c-program ディレクトリに移動する。
$
cd
$ mkdir c-program $ cd c-program |
Emacs を用い、実際にプログラムを入力してみよう。 ファイル名は Hello.c とする。 それでは、以下のように Emacs を起動する。
$ emacs Hello.c & |
次に、Emacs に次のようなプログラムを入力しよう。 また、 C では大文字と小文字を区別して扱うので注意。
入力が終わったら、保存 (C-x, C-s) する。 Emacs の起動時にファイル名を指定しなかった場合、 最下行でファイル名の指定が求められるので、 Hello.c と入力する。
#include < |
これは、単に「Hello!!」 と表示するだけの簡単なプログラムである。 "\n"は改行を意味するのだが、内容は気にしないでまずは実行してみよう。
コンパイルに先立ち ls コマンドで、 Hello.c が作成されているか確認しておこう。 もし表示されていない場合、作業ディレクトリを確認すること。
$
ls
Hello.c |
ここで Hello.c~ や #Hello.c# などが表示されることがある。 Hello.c~ は Emacs が作成した編集前のバックアップファイル、 #Hellow.c# は Emacs が強制終了されたときに編集中だった内容である。
それでは、次のように gcc コマンドを用い、 プログラムをコンパイルする。
$ gcc -o Hello Hello.c |
このコマンドは、C言語のソースファイル Hello.c をコンパイルし、コンパイル結果 (実行形式)を Hello.o という名のファイルにするという意味である。
プログラムに何も問題がなくコンパイルが正常に行われた場合、 何も表示されない。
プログラムに誤りがあると、例えば次のようなエラーメッセージが表示される。
$
gcc -o Hello Hello.c
/tmp/ccaj28f0.o(.text+0x19): In function 'main' : :undefined reference to 'print' collect2: ld はステータス 1 で終了しました |
エラーが発生した場合、エラーメッセージを良く読んで、 Emacs に戻りプログラムを修正する。
プログラムのコンパイルがうまく行っていれば、 以下のように ls でファイル一覧を表示させると、 Hello というファイルができているはずである。 Hello が無い場合、コンパイルがうまくいっていない。
$
ls
Hello Hello.c |
gcc は javac とは異なり、マシンで直接実行可能なコード(実行形式) を生成する事が出来る。 ls した時に Hello の文字が緑色なのは,直接実行可能である事を示している (文字色で区別せず、Hello* のようにファイル名の最後に *印を付して区別するシステムも多い)。
それでは先程のプログラムを実行してみよう。
コマンドプロンプトの直後に、実行したいプログラムの名前をコマンドのように直接指定する。 ただし、実行形式のファイルを指定する際には、どのディレクトリにあるファイルかを シェルに知らせる必要がある。今回の場合、現在作業中のディレクトリにあるファイルで あるので、ファイル名の前にカレントディレクトリである事を明示する。
$
./Hello
Hello!! |
ここで Hello!! と表示されれば成功である。 実行時にエラーが発生した場合にも、 画面にエラーメッセージが表示される。
なお、よくある間違いは、ディレクトリの指定忘れである。 この例では、もし、./ を指定せずに下記のように実行すると、そのような プログラムは存在しないという意味のエラーメッセージが出力される。
$
Hello
bash: Hello: command not found |