
C言語基礎|C言語の歴史
UNIXと一緒に育ったC言語―いまも世界の土台を支える“伝説の実用言語”を、やさしくたどろう。
C言語って、古いのにずっと現役ですよね。
それは「昔流行ったから」ではなく、OSやコンパイラ、組込み機器、ゲーム、ネットワーク機器みたいな“土台”の世界で、今も必要とされ続けているからです。
このページでは、C言語がどこから来て、なぜUNIXと結びつき、どう広まり、どんな言語に影響を与えたのかを、年表や図でスッキリ整理していきます。難しい暗記はなしで、「なるほど、そういう流れか!」が残るように進めますね。

ざっくり一枚でわかる流れ
図:C言語の系譜(超ざっくり)
BCPL(Richards)
↓
B(Thompson)
↓
C(Ritchie)
↓
UNIXがCで書き直される → 移植しやすくなる → 広く普及
図の説明
- C言語は、いきなり空から降ってきたわけではなく、先にあった言語の“良いところ”を受け継いで育ちました。
- そして決定打が「UNIXがCで書き直された」ことで、C言語が一気に実用の中心に入っていきます。
年表で見る C言語の誕生と広がり
C言語まわりの歴史(要点だけ)
| 年代 | 出来事 | ざっくり意味 |
|---|---|---|
| 1960年代 | BCPL が登場 | システム寄りの言語の流れができる |
| 1970年ごろ | B 言語 | BCPLを元にして、もっと軽く実用へ |
| 1972年ごろ | C言語が生まれる | Bの後継として、より現実的に |
| 1970年代 | UNIX 開発と結びつく | OS開発の現場で磨かれる |
| 1978年 | The C Programming Language(K&R) | C言語の“定番本”として広がる |
| 1980年代〜 | 標準化と普及 | いろんな機種・OSへ広がり続ける |
表の説明
- 重要なのは「C言語がOS開発の現場で鍛えられた」ことです。
- だから“速い・小さい・移植しやすい”みたいな性質が、最初から強いんですね。
C言語は UNIX の副産物?
本文にあるように、C言語はUNIXの開発と強く結びついていました。初期のUNIXはアセンブリで書かれていたけれど、あとでCで書き直されたことで「別の機械へ移す」ことが現実的になりました。
アセンブリ中心 vs C中心(UNIX開発視点)
| 観点 | アセンブリ中心 | C中心 |
|---|---|---|
| 実行速度 | とても速い | 十分速い(しかも調整しやすい) |
| 移植 | つらい(機種依存が強い) | やりやすい(再コンパイルで済む範囲が増える) |
| 保守 | つらい(読み書きが大変) | しやすい(構造化できる) |
| 開発効率 | 低め | 高め |
表の説明
- OSは「長く育て続けるソフト」なので、保守と移植がめちゃくちゃ大事です。
- Cはそこにドンピシャで、結果的にUNIXと一緒に広まりました。
K&R って何?なぜ “バイブル” と呼ばれるの?
K&R は、Dennis M. Ritchie と Brian W. Kernighan が書いたC言語の解説書の愛称です。
設計者本人が関わっている説明書なので、当時のC言語理解の“基準点”になりました。
K&R のポイント
| ポイント | 意味 |
|---|---|
| 設計者が関わる | 仕様と意図が一致しやすい |
| 例が実用寄り | 小さく書いて本質を見せる |
| 参照マニュアル的な付録 | 当時の標準的な理解の土台になる |
表の説明
- K&Rは「読み物」でもあり「基準」でもあったので、C言語が広がるスピードを押し上げました。
C言語が後の言語へ与えた影響
Cは“土台の言語”として、後の多くの言語に影響しました。文法だけでなく、考え方(メモリ、ポインタ、低レイヤの発想)も含めてです。
影響のイメージ
| 言語 | 影響の例 |
|---|---|
| C++ | 文法・型・演算子の多くをCから継承 |
| Java | 文法の雰囲気(if/for/switchなど) |
| C# | 文法の雰囲気、開発者の学習コストを下げた |
| Rust | 安全性は違うが、システム開発の領域を引き継ぐ |
| Go | シンプル路線だが、Cの実用精神を引き継ぐ |
表の説明
- いまの言語は安全性や便利さが増えていますが、“システムを作る”という土俵はCが切り開いた面が大きいです。
サンプルプログラム
ここでは「Cの歴史」と相性のいい、C標準のバージョンを表示する超シンプルなプログラム例です。
サンプル:C標準の世代感をちょっと味わうプログラム
プロジェクト名:chap14-1-1 ソースファイル名:chap14-1-1.c
#include <stdio.h>
int main(void)
{
/* C標準の世代をざっくり表示する */
#ifdef __STDC_VERSION__
printf("C standard version: %ld\n", (long)__STDC_VERSION__);
#else
/* 古い処理系では __STDC_VERSION__ が無いことがある */
printf("C standard version: (unknown)\n");
#endif
/* 歴史っぽい一言を出す(英語メッセージ) */
printf("C has been powering systems for decades.\n");
return 0;
}実行イメージ(例)
- C standard version: 201112
- C has been powering systems for decades.
※表示される数値は処理系によって変わります。201112 はC11系の例です。
このプログラムに出てくる要素の解説
printf の役割
- 画面に文字列や数値を表示します。
- %ld は long の10進表示です。
プリプロセッサと #ifdef
Cは昔から「環境に合わせてソースを切り替える」文化が強いです。
その代表がプリプロセッサです。
#ifdef の読み方
| 書き方 | 意味 |
|---|---|
| #ifdef マクロ名 | そのマクロが定義されていたら中を有効にする |
| #else | 定義されていなければこちらを有効にする |
| #endif | ここで条件ブロックを終える |
表の説明
- Cは古い環境も含めて動く場面が多いので、こういう分岐が現場で役立ちます。
- 歴史の長い言語らしい“現実対応力”が見える部分ですね。
まとめ:歴史を知るとCが強い理由が見える
- CはBCPL→B→Cという流れの中で生まれ、UNIX開発で鍛えられました。
- UNIXがCで書き直されたことで、移植性と普及が一気に進みました。
- K&Rが“基準”となり、Cの理解が広がりました。
- その後もCは、後の言語やシステム開発に影響を与え続けています。
