この記事を読むのに必要な時間:およそ 1 分
ソースファイルのコンパイル
プログラムが入力できたら,作成したhello.cをgccコマンドを使ってコンパイルします。
リスト2.1 hello.c(前回より)
#include <stdio.h>
int
main()
{
printf("Hello World\n");
return 0;
}
次の図2.2の実行例のように「gcc hello.c」というコマンドラインを入力し,[Enter]キーを押せばコンパイルが開始されます。
コンパイルが正常に行われると,次の行にシェルのプロンプト$が表示されます。このプロンプトが確認できればコンパイルは正常に行われています。
コンパイル時にエラーが発生した場合ば,次の図2.3の実行例のように,プロンプトが表示される前に何らかのエラーメッセージが表示されます。
図2.3 実行例:hello.cのコンパイル時にエラーが発生した場合
$ gcc hello.c
hello.c:6:10: missing terminating " character
$
このような場合は,再度hello.cをテキストエディタで開き,プログラムの入力ミスを修正してファイルを保存し,もう一度gccでコンパイルしてください。
ちなみに図2.3のエラーメッセージは,hello.cの6行目のprintf()内の,ダブルクォート"が閉じられていないために発生しています。
正常にコンパイルが行なわれると,hello.cと同じディレクトリにa.out(※1)という実行バイナリファイルが作成されます。lsコマンドを使って,a.outファイルが作成されていることを確認してください。
プログラムの実行
このa.outを図2.5の実行例のようにして実行し,"Hello World"というメッセージが画面に表示されることを確認してください。a.outの実行時には,頭に「./」を付けてキー入力する必要があります。
図2.5 実行例:a.out(hello.c)の実行
ここまでできたら,hello.cの中の"Hello World\n"
の文字列を好きな他のメッセージに変更し,再度gccでコンパイルし,a.outを実行してここまでの手順を再確認してください。
最も簡単なCプログラム
コンパイルが正常に行なわれ,かつC言語の文法的にも正しい最も簡単なプログラムは,リスト2.1のhello.cからprintf()の部分を取り去ったリスト2.2のnull.cになります。printf()呼び出していないので,#include <stdio.h>も必要ありません。ただしreturnは,後述のとおり省略しないようにします。
このnull.cをコンパイルしてa.outファイルを実行しても何も表示されませんが,バイナリファイルの実行自体はエラーなく正常に動作していることが確認できるはずです(図2.6)。ちなみに,このnull.cは,戻り値として0(シェルスクリプトにとっての真の値)を返すことから,UNIXのtrueコマンドと等価です。
図2.6 実行例:a.out(null.c)の実行
a.outやPATHについて
gccでコンパイルを行うと,a.outというファイル名の実行バイナリファイルがカレントディレクトリ(現在自分がいるディレクトリ)に作成されました。しかし,ここで単純にa.outとコマンド入力してもa.outを実行することはできません。
UNIX(Linux)は,DOS(Windowsのコマンドプロンプト)とは違い,カレントディレクトリにはPATHが通っていないのが普通です。したがって,a.outを実行するには,カレントディレクトリ上にあるファイルであることを明示するため,頭に./を付けて./a.outとコマンド入力する必要があるのです。
.はカレントディレクトリを表す記号,/はディレクトリの区切りを表す記号です。a.outのように,一般ユーザが自分で作成した実行バイナリファイルを./を付けずにそのまま実行したい場合は,実行バイナリファイルを自分のホームディレクトリの下のbinディレクトリ($HOME/bin)に配置し,$HOME/binをPATHに追加して使うようにします。
このほかに,PATHに.を含めるように設定変更してしまうという方法もありますが,そのような設定はセキュリティ上推奨されないため行わないでください。