C言語演習

[| ]  最終更新: 2003/12/11 13:56:56

プログラムの作り方

ソースプログラムの入力

まず、左下のメニューから、[プログラム演習]→[C]と選びます。 すると、画面にKEditとシェルという二つのウインドウがでます。
※まちがって BASICなどを選んだ場合は、右上の×を押して消しておきましょう。
メニュー選択
C言語演習画面

そうしたら、次に、KEditでプログラムを打ち込みます。
一般的な?シンプルなエディタ(Windowsのメモ帳などに似てる)なので、適当に打ち込んでください。
ソースを作成

KEditでは、[ファイル]→[名前をつけて保存]で、適当に名前をつけて保存してください。 ここでは prog1.c としておきます( .c は必須)。
ファイルは、ホームディレクトリ(シェルなどを開いたときの基準となるディレクトリ)にできます。 最初は意識しなくてもいいですが、実際には /home/knoppix/ にできます ( /ramdisk/home/knoppix/ と表示されることもあります)。 なお、これはパソコンの電源を切ると消えてしまいます。
ファイルを保存
ファイルができたかは、シェルで、 ls と入力すると確認できます。 保存前はありません(上)が、保存すると prog1.c ができています。
ファイル確認
これで、ソースプログラムができました。

コンパイルと実行

以下の手順で、コンパイルして実行します。

まず、ソースプログラムを実行ファイルにコンパイルします。

   gcc -o [実行ファイル名] [ソースプログラム名]
とシェルで入力します。 ソースプログラム名はKEditでつけた ファイル名.c です。 実行プログラム名は適当につけてかまいませんが、普通はソースプログラム名から .c を取ったものを使うと混乱せずにいいでしょう。 ここでは、
   gcc -o prog1 prog1.c
としておきます。問題がなければ、何も表示されずに、シェルの応答(〜 ]$)が返ってきます。 エラーがある場合は入力に間違いがありますので、ソースを良く確認してください。 一度ファイル名をつけているので、修正後[ファイル]→[保存]でそのまま更新されます。

コンパイルができたら、実行します。シェル上で

   ./[実行ファイル名]
と入力します。ここでは、
   ./prog1
です。この ./ は「ここにある」という意味を持つおまじないです。 つけなくても動きますが、場合によってはどこか別のところの実行ファイルが動作する可能性があるので、 ./ をつける癖をつけておくと無難です。
コンパイルと実行
上の例ではプログラム通りにメッセージが表示されています。

有用な追加情報

KWrite

KNOPPIX-Edu-TGには複数種類のエディタがはいっていますので、好きなものを使えます。 KEditのつぎ?に簡単そうなのは KWriteです。KEditより多少高級です。 メニューの中にもありますが、シェル上で kwrite ファイル名 で起動することもできます。
(一般に慣れるほどメニューからマウスで探すより、シェルで入力する方が早くなります)。

KWriteが便利なのは、ファイルの種類をある程度認識して、それに応じた表示をしてくれます。 ここでは上の prog1.c 、C言語のソースプログラムを表示していますが、画面でわかるように "int"などのC言語固有のキーワードや文字列部分(「"〜"」、定数("0")などがカラフルに表示され、区別がつきやすくなります。
Kwrite
ちなみに、なんで最初から便利な方をださないかというと、KWriteは機能が多くて、慣れるのがKEditよりちょっと大変そうなのと、パソコンによってはKWriteの動作が遅くなるかも知れないからという配慮?です。 もしかすると、今後の版ではKWriteが標準になるかもしれません。

三角関数を使ったら得たいの知れないエラーが出た

三角関数は math.h をincludeすればつかえる、というのが一般的なC言語の本の記述ですが、KNOPPIXも含め、UNIX系ではちょっと事情が異なります。
算術関数
この図にあるように、cos, sinなどの算術関数を使う場合、上の方法でコンパイルすると、"undefined reference"というエラーが出ることがよくあります。
この場合は、とりあえず、

   gcc -o [実行ファイル名] [ソースプログラム名]  -lm 
-lm をつけて見てください。プログラムに間違いがなければ(たとえば、cosではなくcosineと打っていたりしない)、コンパイルができて、実行もできます。

細かいことをいうと、実行ファイルをつくるために、あらかじめ用意されている関数をライブラリ(関数の山)からコンパイラがひっぱりだしてきてつないでくれるのですが、 -lm をつけない場合は算術関数ライブラリには探しに行きません。 そのため、「見つかりません」エラーがでます。 -lm は、「ライブラリm」も探してこいと命じるための追加オプションです。 ほかにもいろいろありますが、当面は -lm で足りると思います。

ありがちなエラー、警告

一般的な、解説書では見られないようなエラーが、KNOPPIXで見られました。
ありがちエラー
警告という場合は、実行ファイルはできていて、ちゃんと実行できることもありますが、一般にはプログラム制作者の、文法的には正しいけど、意味的におかしいかもしれない打ち込み間違いなどを指摘してくれます。
ここでは、「末尾に改行がない」というへんなメッセージが出ています。
プログラムは画面上では区別が付きにくいのですが、一番最後の行に改行がないとこの警告がでます。 消したければ、エディタで一番最後の行にいって、Enterを一回押せばおしまいです。見た目は変わりません。 非常におせっかいな気がするんですけど、この警告は見掛ける頻度が高い謎の警告なので、注意してください。

(逆にプログラム末に無駄に改行がたくさん入っているほうが個人的にはいやなのですが...)



熊谷正朗 [→連絡]
東北学院大学 工学部 機械知能工学科 RDE
[| ]