プログラミング言語「C」

C
用途汎用
実行コンパイラ
日本語△ (実装による)
対応環境ほぼすべての環境
入手さまざま

最強と目されるプログラミング言語

機能と普及度の点で、現在最強ともいえるプログラミング言語です。 とくにパソコンなどのコンピュータでは、製品として発表されるソフトウェアは かなりの割合で C やその発展形である C++ で開発されています。

性能

JavaBASIC のような 他の多くの言語では、実行時のメモリ管理など、頻繁に行われる処理については コンパイラや実行環境などが受け持ってくれる仕組みになっています。 こういった言語は、細かいところまでプログラム作成時に気を使わなくてよい反面、 細かいところを自前でやりたいときには困ることも少なくありません。 例えば、メモリを効率的に使えるように自分で工夫しようとしても、 メモリ管理は言語システムが行うとされているために、そのための機能が 言語には用意されていなかったりするわけです。

一方、C 言語では、そういった細かい処理もかなりの部分が プログラム作成者に任されています。とくに、先ほどから例に出している メモリ管理の機能は強力で、コンピュータ上でメモリにおかれているデータなら なんでも (テキストや画像はもちろん、プログラム自身まで) 扱うことが できます。メモリはコンピュータが処理を行うときの舞台に当たるものですから、 メモリを自由に使える C は、コンピュータの機能をすべて使えるといっても 過言ではありません。

普及

C 言語は非常に強力ですが、言語自体ののつくりはシンプルです。 そのため、C のプログラムをコンピュータが実行できる機械語に変換するコンパイラも さほど複雑な作りではありません (もちろん、誰でも簡単に作れるとはいきませんが)。 ほとんどの種類のコンピュータには C のコンパイラが存在し、 とくに GNU のコンパイラスイート「gcc (GNU Compiler Collection)」に含まれるものが有名です (以前は GNU C Compiler とされていましたが、他言語のコンパイラもサポートする コンパイラスイートに発展したため、略称が GNU Compiler Collection に変更されています)。 gcc はもともと Unix 用に作られたものですが、その後さまざまな種類の コンピュータに移植され、AMIGA や Windows などのプラットフォームでも 使われています。最近ではマルチメディア重視の基本ソフトとして 登場した BeOS が gcc を標準のコンパイラとして採用しています。

こうして C が普及するに従い、C で開発されたプログラムも増え、 とくに、オープンソースの気風が根づいている Unix 系コンピュータの世界では、 さまざまなプログラムのソースコードが公開・交換されています。 研究・開発に Unix 系基本ソフトがよく使われていることを考えると、 今日のようにソフトウェアが充実してコンピュータが普及するまでに C が果たしてきた 役割はかなりのものだと言えるでしょう。

文法

C 言語の主な要素は、変数と関数です。

変数は、データを格納するために確保されたメモリ領域です。 C では必要な量の領域を確保しさえすれば理論的にはどんなデータでも 扱うことができます。関数はプログラムが持つひとつひとつの機能を 表したものです。プログラム全体のうちどこからどこまでを 「ひとつの機能」とするかは、プログラマーの自由です。プログラム全体を ひとつの関数にすることもできますが、共通して行われる処理を ひとつの関数として独立させるなどして、適度に分割するのが普通です。

C では、ポインタも採用されています。これは変数や関数のようなメモリ上の データの位置を示すものです。ポインタ自身も変数の形で使用します。 メモリ上のデータを順に操作したり、巨大なデータを効率よくやりとりする といった場面でポインタが活躍します。実際、C の実力を発揮できるかは ポインタの使い方にかかっているといってもいいほどです。

その他、データの扱いを簡単に記述するために、配列、構造体、共用体といった データ構造がサポートされています。

利点

C には、応用範囲が広く文法が整理されているなど、さまざまな利点があります。 しかし、最も重要なのは、長く利用されているので、膨大なノウハウが蓄積されており、 ツール類も豊富に手に入るという点です。今後も C がさまざまな方面で 利用されていくことはほぼ間違いがなく、ハードウェアの基礎的な知識は 必要になりますが、プログラミングを楽しむならいつかは習得しておきたい言語です。

C 関連の主なサイト

このほかにもご存知の方は、ご一報ください



Presented by 夏鰯 <sardine@toyfish.net>