Cのプログラムの作成とコンパイルの手順

以下では Windowsでの Cのプログラムの作成とコンパイルの手順を説明します。 プログラミング Ⅰの授業では、bcc32というボーランド社製のコンパイラを使用します。

プログラムの作成

Cのプログラムはメモ帳などのエディタで作成します。 拡張子は通常 .cです。

次のような簡単なファイルを作成して、 hello.cというファイル名で保存して下さい。

#include <stdio.h>

int main(void) {
  printf("hello world!\n");
  return 0;
}

灰色の部分は C言語の実行に必要な「お約束」で最初のあいだはこの部分は変わらないので、この形のままを覚えておきます。 printfは標準出力(通常は画面)に文字列を出力する関数(プログラム部品)です。 「\n」は改行を表します。

コマンドプロンプト

作成したプログラムのコンパイルは コマンドプロンプトから行ないます。 コマンドプロンプトはキーボードからコマンドを入力して実行する時に使用するウインドウです。通常(Windows Vistaの場合)コマンドプロンプトは「スタート」 ─ 「すべてのプログラム」 ─ 「アクセサリ」 ─ 「コマンドプロンプト」から起動します。

まず コマンドプロンプトの作業フォルダを Cのプログラム hello.cを作成したフォルダに移動する必要があります。 フォルダの移動は cdchange directory)というコマンドを使用します。

cd パス
例えば、c:\homeというフォルダにプログラムを作成した時は
C:\Users\sXXtXXX>cd \home
C:\HOME>
と入力します。コマンドプロンプトが出力する、入力を促す文字列プロンプト)が、 C:\HOME> に変わるはずです。 なお、 \Program Filesのようにパスのなかに空白文字が含まれている場合は、 パスを二重引用符で囲んで、
C:\Users\sXXtXXX>cd "\Program Files"
C:\Program Files>
のように入力する必要があります。 パスはもちろん絶対パスでも相対パスでも構いません。 特に一つ上のフォルダに移動する時は、
C:\Users\sXXtXXX\Documents>cd ..
C:\Users\sXXtXXX>
で OKです。

フォルダを移動したら、本当に作成した Cのプログラムのファイルがそこにあるか、確認しておきます。 フォルダの中にあるファイルの一覧を表示するには、dirというコマンドを使用します。

C:\Users\sXXtXXX\Documents\Programming1>dir
 ドライブ C: のボリュームラベルはありません.
 ボリュームシリアル番号は XXXX-YYYY です。
 C:\Users\sXXtXXX\Documents\Programming1 のディレクトリ

yy-mm-dd  hh:mm    <DIR>         .
yy-mm-dd  hh:mm    <DIR>         ..
(省略)
yy-mm-dd  hh:mm                     83 hello.c
(省略)
         ? 個のファイル              ? バイト
         ? 個のディレクトリ          ? バイトの空き領域
このような感じで hello.cの名前が表示されれば OKです。

パス

パスとは、C:\Users\sXXtXXX\Documents\Programming1\hello.cのように ファイルやディレクトリの場所を表す文字列です。エクスプローラで「場所」の左端のアイコン (下図の赤線で囲ったところ)

path.png
をクリックしたときに表示される文字列です。

パスには絶対パスと 相対パスがあります。 先頭に \がついているかどうかで、絶対パスと相対パスを区別します。 \がついていれば絶対パスです。

絶対パスとは “\Users\sXXtXXX\Documents\Programming1\hello.c” のように場所を省略することなく、すべて記述したものです。このパスは Usersフォルダの中の sXXtXXXフォルダの中の Documentsフォルダの中の Programming1フォルダの中の hello.cというファイルを表します。 (Window系の場合、ファイルの位置を示すためには、パスの前に C:のような 「ドライブ名」が必要になります。)

相対パスは絶対パスの最初のいくつかの部分を省略したものです。 現在のディレクトリのパスに対する相対的な位置を表します。 特に単にファイル名を書けば、そのディレクトリにあるファイルを表します。 例えば、\Users\sXXtXXX\Documents\Programming1\ というパスで表されているディレクトリから、hello.exe という相対パスで参照されるファイルの絶対パスは \Users\sXXtXXX\Documents\Programming1\hello.exeです。

下の例は現在のディレクトリのパスが \Users\sXXtXXX\Documents\Programming1\の場合です。
相対 パス絶対 パス
hello.c \Users\sXXtXXX\Documents\Programming1\hello.c
Examples\bonjour.c \Users\sXXtXXX\Documents\Programming1\Examples\bonjour.c
..\ProgLang\sawadi.c \Users\sXXtXXX\Documents\ProgLang\sawadi.c
..は一つ上の階層(親ディレクトリ)を表します。

コンパイル

コンパイルは bcc32というコマンドを使用します。
bcc32 ソースファイル名
テキストエディタで作成したファイルも、コンパイルの結果できるファイルも、 「プログラム」と呼ぶので、前者をソースファイル、 後者を実行可能ファイルと呼びます。
C:\Users\sXXtXXX\Documents\Programming1>bcc32 hello.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
hello.c:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
C:\Users\sXXtXXX\Documents\Programming1> 

コンパイルに成功すれば、ソースファイルのファイル名の拡張子だけを .exeに変えたファイルができているはずです。 これが実行可能ファイルです。

C:\Users\sXXtXXX\Documents\Programming1>dir
 ドライブ C: のボリュームラベルはありません.
 ボリュームシリアル番号は XXXX-YYYY です。
 C:\Users\sXXtXXX\Documents\Programming1 のディレクトリ

yy-mm-dd  hh:mm    <DIR>         .
yy-mm-dd  hh:mm    <DIR>         ..
(省略)
yy-mm-dd  hh:mm                     83 hello.c
yy-mm-dd  hh:mm                 52,224 hello.exe
(省略)
         ? 個のファイル              ? バイト
         ? 個のディレクトリ          ? バイトの空き領域
なお、Bcc32の場合、拡張子が .tds.objのファイルもできていると思いますが、これらは中間生成物です。 プログラムの実行には必要ありません。

「'bcc32'は内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」というメッセージが出た時は、bcc32が コマンドプロンプトの知っている場所サーチパス)にない可能性があります。 pathというコマンドで確認します。

C:\Users\sXXtXXX\Documents\Programming1>path
PATH=C:\Windows\System32;C:\Windows;C:\Windows\System32\Wbem;
pathコマンドに対する出力の中に C:\borland\bcc55\Bin という部分があれば良いのですが、なければこのパスをサーチパスに加えておきます。
C:\Users\sXXtXXX\Documents\Programming1>path C:\borland\bcc55\Bin;%PATH%

C:\Users\sXXtXXX\Documents\Programming1>path
PATH=C:\borland\bcc55\Bin;C:\Windows\System32;C:\Windows;C:\Windows\System32\Wbem;

実行可能ファイルはそのファイル名を入力すると実行できます。 (拡張子の.exeは省略できます。)

C:\Users\sXXtXXX\Documents\Programming1>hello
hello world! 

なお、ソースファイルの中に何か間違いがあってうまくコンパイルできないことの方が普通です。 エラーメッセージには何行めがエラーになっているか、という情報が書かれていますので、再びエディタでソースファイルを編集して、 コンパイルしなおします。

なお コマンドプロンプトでは上矢印キーを打つと以前入力したコマンドが表示されます。

コマンドプロンプトでのコピーとペースト

コマンドプロンプトでは通常のショートカットキー(Control-Cと Control-V)でコピー・ペーストの操作ができません。コマンドプロンプトのウインドウの 左上の小さなアイコン: (下図の赤線で囲ったところ)

commandPrompt.png
をクリックし、「編集」─ 「コピー」または「貼り付け」を選びます。

パイプとリダイレクト

少し長いプログラムをコンパイルすると、エラーメッセージが コマンドプロンプトの画面に入り切らないということが起こります。 そういう時は、プログラムの出力を画面ではなく、ファイルや他のコマンドの入力に切替えるリダイレクトという手法を使います。

コマンド > ファイル名
コマンド1 | コマンド2
>」の方はコマンドの結果をファイルに出力します。 このファイルをテキストエディタで見れば良いわけです。 「|」はコマンド1の出力を、コマンド2の入力として渡します。 コマンド2としては moreというコマンドが良く使われます。 moreは長いテキストを画面におさまる範囲ずつ表示するプログラムです
C:\Users\sXXtXXX\Documents\Programming1>bcc32 hello.c > error.txt
C:\Users\sXXtXXX\Documents\Programming1>bcc32 hello.c | more

プログラミング Ⅰのホームページ
Koji Kagawa