はじめに
このテキストはC言語を学びたいと思っている(もしくは、卒研に必要なので勉強しなさいと言われた)4回生向けに書かれています。そのため、これまでの実習で使ってきたPythonの知識があることを前提としています。といってもPythonのプログラムをソラで書ける必要はありません。でも、できれば「こんなことやったな〜」ぐらいに記憶を戻しておいて下さい。
またこのテキストは、必要最低限のC言語の知識を持ってもらいたいという意図で作成されています。そのため、このテキストにはC言語の文法がすべてでてくる訳ではありません。体系だったC言語の知識も必要とする人は、このテキストだけでなく市販のC言語の解説書も参考にしましょう。C言語の解説書は、本屋さんに行けば選びきれないほどたくさんの種類が売られています(私の個人的なおすすめは「プログラミング言語C第2版、B.W.カーニハン、D.M.リッチー著、石田晴久 訳、共立出版」ですが、少し敷居が高いかもしれません)。
では、まずCがどんな特徴を持っているかについて説明していきましょう。
C言語の特徴
C言語は非常に汎用性の高いプログラミング言語です。そのためにいろいろな種類のコンピュータの上で様々な目的に対して使われています。一例を挙げれば、皆さんが使っているLinux OSも基本はC言語で書かれています。一方で、その汎用性の表裏一体として、C言語は非常に小さな言語体系になっています。つまり、C言語自体に備わっている命令や構文(自然言語で例えると単語と文法)は、プログラムを作るのに必要なほとんど最小のセットになっています。これは、覚えなければいけない命令や構文の数が他のプログラム言語に比べて少ないことを意味しますが、その分Pythonでは一行で済んでいた処理を、C言語では数行にわたってプログラムすることが必要になる場合もあります。特に文字列の操作に関してはPythonを最初に学習した身にはとても煩雑に感じるでしょう。でも、それほど心配はしないで下さい。我々が作成するプログラムで必要な基本的な処理は、大抵「関数」という形であらかじめ用意されています。関数についての詳しい説明は後に出てきますが、関数をどのように使うか、そして作るかがC言語を使いこなす上で一つのキーポイントになります。
C言語のもう一つの特徴として、かなり「低水準」な言語であることも挙げられます。ここでの「低水準」とは、よりコンピュータのハードに近いという意味です(だから、OSが書ける言語にもなると言えます。Pythonは「高水準」な言語ですが、OSは書けません)。最も端的に「低水準」であることを示している点としては、C言語ではプログラムが使うメモリをかなり意識してプログラミングする作りになっているところです。そのメモリの操作に密接に関わるのがポインタという変数です。ポインタは使いこなせば非常に便利で高速な処理も期待できます。しかし、一見正しいプログラムなのにまともに動かない場合の原因の多くはポインタの処理の間違いです。ポインタはC言語を習得する上で最大の難関といってもいいでしょう。このテキストでも、いろいろなところに陽にも陰にもポインタが現れます。
最後に、Pythonとの比較で顕著な違いを挙げましょう。それは、Pythonでは人間が書いたプログラムそのものを実行することができましたが、C言語で書かれたプログラムは、そのままでは実行できないという所です。つまり、C言語のプログラムには、人間が記述するプログラム(今後「ソースプログラム」と書きます)と、コンピュータが理解できて実行できるプログラム(今後「実行形式」と書きます)の2種類があります。C言語で書かれたプログラムは、ソースプログラムから実行形式へ変換しなければ実行できません(この操作はコンパイルと呼ばれるます)。面倒だと思う人もいるかもしれませんが、これはこれでいい点があります。それは、C言語で書かれたプログラムは、同じ内容をPythonで書くよりも、一般に実行速度が早いということです。Pythonで書かれたプログラムをコンピュータが実行できるのは、プログラムの実行のたびにいちいちコンピュータが理解できるバイナリに翻訳しているためです。一方で、C言語で書かれたプログラムは、あらかじめコンピュータが理解できる形に翻訳してあるプログラムを作るので、実行速度は早くなります。
まとめ
いろいろ脅すようなことも書きましたが、C言語が理解できれば、他のプログラミング言語の習得も容易になるはずです。がんばって実習していきましょう。
次回からは、早速C言語によるプログラミングに入ります。