【しーげんご】

C言語 とは?

最終更新:
💡 システムの実装を支え、多くの言語に影響したC

1970年代初めにベル研究所のデニス・リッチーが開発した汎用プログラミング言語。Unixの実装とともに発展し、ポインタなどでメモリを扱う。C++など多くの言語に影響を与えたが、すべての言語の祖先ではない。

📌 このページのポイント
Cの前身と、ほかの言語への影響 BCPL Cより前の言語 B Cの前身 C 1970年代初め Cは多くの言語に影響を与えた C++ Java Go 破線:Cの影響を受けた言語の例 C自身も、さらに前の言語から影響を受けている
実線矢印は前身からの発展。破線は影響の例で、すべての言語の家系図ではない。
ひよこ ひよこ
C言語っていつ生まれたの?
ペンギン先生 ペンギン先生
ベル研究所のデニス・リッチーが、Unixの初期の開発と並行して育てた言語だよ。本人の回顧では1969〜1973年に成立し、特に1972年に開発が進んだと説明している。1973年にはUnixカーネルをCで書き直せる段階になったんだ。
ひよこ ひよこ
今でもOSで使われてるの?
ペンギン先生 ペンギン先生
例えばLinuxカーネルはCで書かれ、公式資料にはRustの対応も記載されているよ。一つのOS全体が一つの言語だけでできている、とは限らない。Cはシステム実装で使われる代表的な言語の一つなんだ。
ひよこ ひよこ
Cなら必ず速くなるの?
ペンギン先生 ペンギン先生
メモリや機械に近い操作を記述できるのは特徴だよ。でも実際の速度はアルゴリズム、コンパイラ、実行環境などにも左右される。Cで書くだけで、どんな処理も別の言語より速くなるわけではないんだ。
ひよこ ひよこ
メモリは全部自分で確保して解放するの?
ペンギン先生 ペンギン先生
全部ではないよ。普通のローカル変数にはブロックを出ると寿命が終わるものもある。一方、mallocで動的に確保した領域は、失敗を確認し、不要になったらfreeで解放する必要がある。ポインタの参照先がまだ有効か、配列の範囲を越えないかにも注意するんだ。
ひよこ ひよこ
ほかの言語のご先祖さまなの?
ペンギン先生 ペンギン先生
多くの言語に影響したけれど、すべての言語の祖先ではないよ。C自身にもBCPLやBという前身があり、さらにFortranやAlgolから影響を受けた。図の下段はCに影響された言語の例で、直接の親子関係を全部表す家系図ではないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「C言語」って出てきたら「OSなどのシステム実装を支え、多くの言語に影響した言語」と思えればだいたいOK!
📖 おまけ:英語の意味
「C Language」 = Cという名前のプログラミング言語
💬 前身はB言語。リッチーは一文字の名前を引き継いでCとしたと説明し、アルファベット順なのかBCPLの文字順なのかは決めていないとしているよ

参考資料

← 用語集にもどる