Cプログラミング入門

第4回 Chapter 2 Cプログラミング最初の一歩~Hello Worldからはじめよう(2)

この記事を読むのに必要な時間:およそ 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.2 実行例:hello.cのコンパイル

$ gcc hello.c
$

コンパイル時にエラーが発生した場合ば,次の図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ファイルが作成されていることを確認してください。

※1
Cygwin環境ではOSの仕様によりa.exeになります。

図2.4 実行例:a.outファイルの確認

$ ls
a.out  hello.c
$

プログラムの実行

このa.outを図2.5の実行例のようにして実行し,"Hello World"というメッセージが画面に表示されることを確認してください。a.outの実行時には,頭に「./」を付けてキー入力する必要があります。

図2.5 実行例:a.out(hello.c)の実行

$ ./a.out
Hello World
$

ここまでできたら,hello.cの中の"Hello World\n"の文字列を好きな他のメッセージに変更し,再度gccでコンパイルし,a.outを実行してここまでの手順を再確認してください。

最も簡単なCプログラム

コンパイルが正常に行なわれ,かつC言語の文法的にも正しい最も簡単なプログラムは,リスト2.1のhello.cからprintf()の部分を取り去ったリスト2.2のnull.cになります。printf()呼び出していないので,#include <stdio.h>も必要ありません。ただしreturnは,後述のとおり省略しないようにします。

リスト2.2 null.c

int
main()
{
  return 0;
}

このnull.cをコンパイルしてa.outファイルを実行しても何も表示されませんが,バイナリファイルの実行自体はエラーなく正常に動作していることが確認できるはずです(図2.6)。ちなみに,このnull.cは,戻り値として0(シェルスクリプトにとっての真の値)を返すことから,UNIXのtrueコマンドと等価です。

図2.6 実行例:a.out(null.c)の実行

$ ./a.out
$ 

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に.を含めるように設定変更してしまうという方法もありますが,そのような設定はセキュリティ上推奨されないため行わないでください。

著者プロフィール

山森丈範(やまもりたけのり)

「C言語はアセンブラを触っているうちに自然に覚えてしまった」というプログラマ。C言語とのかかわり上,OSは専らUNIXを使用。C言語のプログラムでは,いつもLinux/FreeBSD/Solarisすべてで動くことを気に留めている。C言語と同様に移植性の高いシェルスクリプトにも思い入れが深く,著書に『シェルスクリプト基本リファレンス』がある。

著書

コメント

コメントの記入