(13.1) プログラムを書くに当たっては テキストエディタで「ソースファイル」を作成し、 「コンパイラ」でそれを「コンパイル」し、「実行ファイル」を作る (のが普通である)。
(13.2) 「実行ファイル」はコンピュータが読んで実行するもので、 人間が読んでもまずわからない。 「ソースファイル」は文字だけが並んでいるテキストファイルで、 訓練をつめば読み書きができるようになる。 「コンパイル」はここでは「変換する」「翻訳する」ぐらいの意味である。 ソースファイルを書く際に用いる言語はいろいろあるが、 ここでは「C言語」(シーげんご)を用いる。 C言語で書かれたソースファイルを実行ファイルにコンパイルするコンパイラのことを 「Cコンパイラ」とも言う。 Cコンパイラの使い方は、この授業で扱う範囲では極めて簡単である。 よって、 これから学ぶことの中心はC言語によるソースファイルの書き方である。 以下、「プログラミング」と言ったらそれを指す。
(13.3) コンピュータにおいて、 バックスラッシュ「\」と円マーク「¥」 は半角文字では同じものと思ってよい。 スラッシュ「/」は別物である。向きが違う。混同するな。 右手で文字を書く人にとって書きやすいほうがスラッシュ、 逆向きがバックスラッシュと覚えるとよい。 (「全角文字」とはほぼ正方形をしている「あいうえおABC123」などの文字。 「半角文字」はそれを縦に半分に割った大きさの、 「ABC123」などの文字。 この節の「\」「¥」「/」 はいずれも全角文字である。)
(13.4) 次の例は参考書としてあげておいたカーニハン/リッチー著・石田晴久訳「プログラミング言語C第2版」(共立出版) (以下 K&R2 と略す)の §1.1 とほとんど同じである。
#include <stdio.h> main() { printf("hello, world\n"); }
(13.5) 1 行目。 きょうのところはこれは「決まり文句」と考えよう。 「#」は Shift しながら 3 のキーを打つ。 この記号は楽譜の中で使ったときの名称から 「シャープ」と呼んでおくが、正式名称は別にあったと思う。 include は英単語そのままだ。 この次にスペースを入れているが、入れなくてもよい。 stdio.h を囲む 「< >」は不等号をカッコの代わりに使っているもの。 Shift しながらカンマとピリオドのキーを打つ。
(13.6) 2 行目は空行である。見やすくするためにおいたもの。意味はない。
(13.7) 3 行目と 5 行目もCプログラムに必ずおくもの。 「main」の次にあるのは小カッコの開きと閉じ。 Shift しながら 8 と 9 のキーを打つ。 この次にスペースを入れているが、入れなくてもよい。 その次にあるのは中カッコの開き。 5 行目にあるのが中カッコの閉じ。 中カッコは、Shift しながら大カッコのキー(Enter のすぐ左にある)を打つ。 これらの中カッコは 4 行目を囲んでいる。つまり、 「main() { ... }」のことである。 こう書かずに上のようにする理由はそのうちわかってくる。 また、この中カッコの書き方は K&R2 とやや異なる。 この授業では一貫して私の書き方で教えるので、 すでに自分流のつけ方を編み出している人以外はとりあえずそれにならえ。
(13.8) よって、4 行目がこのプログラムのうちで最も意味のある部分ということになる。 この行は頭に空白がある。 この空白は Tab(タブ)キーを一度押すことでとる。 空白を置く理由はそのうちわかってくる。 このように行頭に空白を置くことを「字下げ」「インデント」という。 また、そこには tab という見えない文字があると考える。 (プログラムを(いわゆる)ホームページからコピーした場合には、 インデントの空白は tab ではなくスペース四つになるが、 コンパイル結果には影響しないので気にするな。)
(13.9) printf() は元々用意されている「関数」である。 「プリントエフ」と読むことが多いかと思う。 関数の原語は function で、ここでは本来の意味である「機能」に近い。 この関数の機能は後ろの小カッコの中の文字列を印字する(=画面に書く) ことである。 文字列は二重引用符「" "」 (Shift しながら 2 のキーを打つ)で囲む。 ここでは印字される文字列に「\n」が含まれている。 「\n」はこの二文字で「改行」を意味する。 すなわち、これを画面に書くとそこで改行する。 よって、「hello, world\n」を画面に書くということは、 「hello, world」を画面に書いて最後に改行する、 ということになる。
(13.10) 4 行目の最後にはセミコロン「;」がついている。 C言語では文はセミコロンで終わることになっているので、忘れるな。 また、この「セミコロン」などの名称もこの機会にきちんと覚えよ。
(13.11) これを作成し、コンパイルし、実行する際の流れは次の通り。 (emacs によるエディット以外はすべてターミナルの中で行なう。)
(13.12) 注意:
(13.13) 練習問題(第〇部)
(13.14) 以下の練習ではソースファイル名は指定しない。適当につけること。 hello.c の内容を次々と変更していっても構わない。
(13.15) ※ ターミナルで、 プロンプトが出ているところで「↑」キーを何度か押すと、 以前に打ち込んだコマンドが出てくる。 行きすぎたら「↓」で戻れる。 それを編集してから実行することもできる。
(13.16) 練習問題(第一部)
printf("hello, "); printf("world\n");のようになる。
(13.17) 練習問題(第二部)
(14.1) プログラムの実行を中止してプロンプトに戻りたいときは Ctrl+C を押す。 途中でいったんとめて様子をみるときは Ctrl+S を押す。 任意のキーで再開する。 (Ctrl+Q でなければ再開しないこともある。)
(14.2)
#include <stdio.h> main() { int i; for (i = 0; i < 10; i++) { printf("%d の二乗は %d です.\n", i, i*i); } }(14.3) まずこのプログラムをざっと理解したうえで、 実行してみよう。(ソースファイル名は適当に。)
(14.4) 「int i;」とあるのは int 型変数の宣言。 整数に値をとる変数 i を使うよ、と宣言している。
(14.5) for( ; ; ) は繰り返し。 「i が 0 から始めて」 「i が 10 未満である限り」 「i を一ずつ増やしながら」、次の中カッコの中の文を繰り返す。
(14.6) printf() の " " の中の %d は 後ろの式の値で置き換わって出力される。
(14.7) 次に、これを改造してみよう。
(14.8) 注意: プログラムの実行時に 「セグメントエラー (coreを出力しました)」というエラーメッセージが出た場合、 core.????(「?」は数字) という名前のファイルができていることがある。 このファイルは場所ふさぎなだけなので、 なるべく早く削除すること。 このエラーはコンピュータに害をおよぼすものではないが、 プログラムに重大なミスがある、ということである。