next up previous contents
Next: 1.3 初めての C プログラム Up: 1. 初めての C Previous: 1.1 C とは何か?

1.2 プログラムの作り方

コンピュータで実行可能な物を、実行形式などと言い、実行形式のファイルを 実行可能ファイルと呼ぶが、C で実行形式を作成するには以下の手順を踏まなければ ならない。

ソースコードの作成

vi 等のエディタを用いて、ソースと呼ばれるテキストファイルを作成する。

コンパイル

ソースを機械語に翻訳してもらう。( 出来たものをオブジェクトと言う )

リンク

上で作ったオブジェクト同志やライブラリ中のオブジェクトを結合して 実行可能ファイルを作成する。

実行

作った実行可能ファイルを実行する。

最初はコンパイルとリンクは、意識しなくても、コンパイラー( 翻訳者 )が勝手に やってくれる。従って、当面は、以下の手順でCの場合は実行ファイルが作られる。

ソースを書く

例 $ vi kadai1_1.c

コンパイルする

例 $ cc kadai1_1.c

実行する

例 $ a. out

一方、C$++$ では、ソースのファイルの名前の拡張子(. の後ろ)が 違うのと、コンパイルの際に用いるコマンドが少し違う。

ソースを書く

例 $ vi kadai1_1.cpp

コンパイルする

例 $ g++ kadai1_1.cpp

実行する

例 $ a. out

実行ファイルの名前は、何も指定しないと必ず a. out という名前になる。 (実行ファイルの名前の付け方は、後で学ぶが、a. out の名前を変えても良い。)

ソースファイルの名前は、C の場合には . c を、C++ の場合には . cpp を必ず付けなければならない。

 

ところが、コンパイラーがうまく翻訳できないと、g++ または、 cc をした時に、 Cならば次のようになることがあり、

    "kadai1_1.c", line 5: syntax error at or near variable name "printf"

C++ならば次のようになることがある。

    kadai1_1.cpp:3:  syntax error before string constant

英語で出てくるとそれだけでパニックになる人もいるだろうが、落ち着いて読めば それ程たいしたことはない。

まず最初の kadai1_1.cpp は、ソースファイルの名前です。次の、 :4: は、4行目という意味。で、最後の、 syntax error before `<' が大変ですが、 syntax というのは 「 文法 」 という単語なので、syntax error は文法エラーという 意味ですね。だから、書いたソースが文法的に間違っていたということになります。 次の、begore は「前に」という意味なので、string は文字列を意味しています。

3行目: "string constant" の前で文法エラーですよ!

5行目:variable name "printf" の所か、またはその近くで 文法が間違っているよ!

という意味になる訳です。ところが、コンパイラーというものは、1行目から順番に ソースを読んでいくので、3行目でおかしくても取り敢えず解釈できる限りは解釈 しようとする。そのために、3行目に原因があるのに、4行目がおかしいと言って 来るときがあるので、注意しよう。だから、エラーが出たら、まずそのエラーの 出ている行をチェックし、次にその前の行、そこも正しければ、更に前の行という 具合に前に戻っていけば良い。 反対に、後ろの行に原因があることは、ほとんどと 言ってないので気にする必要はない。

 

また、エラーのメッセージが複数出てくるときもあるが、別に気にせず、最初の エラーだけを修正して、コンパイルしなおせば良い。 何故ならば、最初の行が 変だったのでコンパイラーの気が狂ってしまっている場合が多いからだ。 最初のエラーを修正しても、まだエラーが出る場合は、また同じように最初の エラーメッセージについてだけ修正し、コンパイルする、という風に繰り返して 尺取虫のように順番に直していくのがコツである。



Noriyo Kanayama