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は、後の言語やシステム開発に影響を与え続けています。