
C言語のきほん|C言語のバージョン
C言語のバージョンを知ると、学ぶべき基準と使い分けがはっきりわかる。
C言語は、1970年代に生まれてからずっと使われ続けている、とても息の長い言語です。
でも、ずっと同じ形のままではなく、時代に合わせて少しずつ改良されてきました。
その改良の区切りが、C89、C99、C11、C17、C23 などの「バージョン(規格)」です。
この規格を知っておくと、学習中に見かける機能の違いや、コンパイラの設定、サンプルコードの書き方の意味がわかりやすくなります。
ここでは、C言語の主要なバージョンを表や図で整理しながら、なぜこのサイトでは C17 を基準に学ぶのか まで、やさしくしっかり解説していきます。

まずは「C言語のバージョン」とは何か
C言語のバージョンは、ゲームやアプリのアップデート番号のようなものではなく、標準規格の版 です。
つまり、「C言語としてこう書けばよい」という共通ルールを、国際的に整理したものです。
バージョン(規格)を学ぶ意味
| 観点 | わかること |
|---|---|
| 互換性 | どの書き方がどの環境で使えるか |
| 学習の安心感 | 教材の基準が明確になる |
| 実務での判断 | 新機能を使うか、安定性を優先するか判断しやすい |
| コンパイラ設定 | GCCなどでどの規格を指定するか理解できる |
この表のポイントは、バージョンの知識が単なる歴史の暗記ではなく、実際にコードを書くときに役立つ知識 だということです。
C言語の主要なバージョンを一覧で整理する
まずは、本文に出てきた主要バージョンを見やすく一覧にしておきます。
C言語の主要バージョン一覧
| バージョン | 年 | 位置づけ | ざっくり特徴 |
|---|---|---|---|
| K&R C | 1978 | 初期の実質標準 | 書籍ベースで広まった初期C |
| ANSI C(C89) | 1989 | 最初の標準規格 | 仕様が整理され、標準化が進む |
| C99 | 1999 | 大きめの拡張 | 書きやすさ・表現力が向上 |
| C11 | 2011 | 安全性・並列処理強化 | スレッド対応や安全面の改善 |
| C17 | 2018 | 安定化版 | C11の修正・明確化が中心 |
| C23 | 2024 | 最新規格 | 新機能追加と現代的な改善 |
ここでは細かい機能名よりも、どの版が「新機能追加」寄りで、どの版が「安定化」寄りか を見るのがコツです。
K&R Cとは何か
C言語の初期に大きな影響を与えたのが、カーニハンとリッチーの書籍 The C Programming Language です。
この本の内容に基づく初期のC言語が、K&R C と呼ばれています。
K&R C のポイント
| 項目 | 内容 |
|---|---|
| 呼び名 | K&R C(Kernighan and Ritchie) |
| 由来 | 書籍 The C Programming Language の著者名 |
| 役割 | 初期C言語の事実上の標準として広まった |
| 意義 | 今日のC言語の土台を作った |
K&R C は、今のような正式な国際規格の前段階にあたる存在です。
「最初のルールブック」として多くの開発者に共有され、C言語の普及を大きく後押ししました。(Nokia Corporation | Nokia)
ANSI C(C89)で「標準化」が進んだ
1989年には、ANSI によって最初の標準規格が策定されました。
これが ANSI C(C89)です。
ANSI C(C89)の意味
| 項目 | 内容 |
|---|---|
| 規格名の通称 | ANSI C / C89 |
| 重要な点 | あいまいだった部分が整理された |
| 効果 | コンパイラ間の違いを減らしやすくなった |
| 学習面の価値 | 基本文法の共通ルールが明確になった |
ポイントは、C89 で 「みんなが同じC言語を使いやすくなった」 ことです。
標準化によって、教材・コンパイラ・実務コードの共通土台ができたイメージです。(ウィキペディア)
C99で表現力が上がった
1999年の C99 では、C言語の表現力や書きやすさがかなり強化されました。
大規模なコードや、より実践的な記述に向いた改良が多く入っています。
C99の位置づけ
| 観点 | 内容 |
|---|---|
| 方向性 | 実用性・記述性の向上 |
| 印象 | C89より書きやすくなった |
| 学習での注意 | 古い環境では一部機能が使えないことがある |
ここでは細かい機能名を全部覚えなくて大丈夫です。
大事なのは、C99 が 「C言語をより現代的に使いやすくした節目」 だということです。
C11で並列処理と安全性が強化された
2011年の C11 では、マルチスレッド関連の機能や、安全性を高める方向の改善が入りました。
このあたりから、現代の開発環境に合わせた整備がより意識されるようになります。
C11のポイント
| 項目 | 内容 |
|---|---|
| 並列処理 | マルチスレッド対応の仕組みが規格化 |
| 安全性 | より安全な実装・記述を意識した改善 |
| 実務への影響 | モダンな開発に合わせた土台が整った |
この表で見てほしいのは、C11 が「ただの新機能追加」ではなく、現代的な開発ニーズへの対応 という意味を持っていることです。
C17は「安定して学びやすい」基準
2018年の C17 は、C11 を土台にした安定化版です。
大きな新機能を増やすよりも、仕様の修正や明確化が中心になっています。
C17のポイント
| 項目 | 内容 |
|---|---|
| 位置づけ | C11の安定化・修正版 |
| 新機能 | 大きな追加は少ない |
| 強み | 安定していて教材・実務で扱いやすい |
| 学習向けか | とても向いている |
GCCの公式情報でも、C17 は大きな変更より技術的な修正・明確化が中心と説明されています。
また、GCCでは C17 を明示的に -std=c17 で指定できます。(GCC)
C23は最新規格
C23 は現在の最新のC標準規格です(ISO/IEC 9899:2024)。
C17の次の版として、現代的な記述や互換性の改善などが取り込まれています。(en.cppreference.com)
C23のポイント
| 項目 | 内容 |
|---|---|
| 規格の位置づけ | 現在の最新規格 |
| 規格名 | ISO/IEC 9899:2024(通称 C23) |
| 方向性 | 記法の改善、互換性向上、現代的な機能追加 |
| 学習時の見方 | すぐ全部追うより、まずC17を固めてからでもOK |
C23 はとても大事ですが、学習の最初から全部追う必要はありません。
まずは安定した基礎(C17)を学んで、あとから差分を取り入れる進め方が学びやすいです。
C言語の主要バージョンの推移を図で確認する
本文の内容を、流れとして見える形にした図です。
C言語の主要なバージョンの推移(図)

C言語が長く改善され続けている言語 だということが分ります。
特に、C17 と C23 が近年の規格だとわかると、C言語が今でも現役だと実感しやすくなります。(en.cppreference.com)
なぜこの教材ではC17に準拠するのか
ここは学習方針としてとても大事なポイントです。
C23 は最新ですが、入門では C17 を基準にするのがかなり合理的です。
C17を基準にする理由
| 理由 | 説明 |
|---|---|
| 安定している | C11の修正・明確化が中心で挙動が安定しやすい |
| 情報が豊富 | 教材・解説・実務例が見つけやすい |
| GCCで扱いやすい | -std=c17 で明示的に指定できる |
| 入門に向く | 新機能の差分より基本文法に集中できる |
GCCの公式ドキュメントでも、C17 は安定的な選択肢として扱われています。
まずC17で土台を固めて、その後にC23の新機能を学ぶ流れは、とても実践的です。(GCC)
GCCでC17を指定する考え方
GCCを使って学ぶ場合は、規格を明示しておくと安心です。
たとえば、C17としてコンパイルしたいなら、-std=c17 を使います。
GCCの規格指定
| 指定例 | 意味 |
|---|---|
| -std=c17 | C17の標準規格としてコンパイル |
| -std=gnu17 | C17 + GCC拡張を有効にする |
| -std=c11 | C11としてコンパイル |
| -std=c23 | C23としてコンパイル(環境の対応状況に注意) |
ポイントは、同じC言語でも規格指定で扱いが変わる ことです。
学習中に「このコードが通らない」というとき、規格の違いが原因になることもあります。
各バージョンをどう使い分けるか
最後に、学習と実務の視点でざっくり使い分けを整理しておきます。
学習・実務での使い分けイメージ
| 場面 | おすすめの考え方 |
|---|---|
| 入門学習 | C17を基準にする |
| 古い資料を読む | C89/C99の記法も見かける前提で読む |
| 最新情報を追う | C23の新機能を少しずつ取り入れる |
| 実務 | プロジェクトの規約・コンパイラ対応に合わせる |
大事なのは、どのバージョンが絶対に正しいというより、目的に合わせて基準を決める ことです。
この教材では、その基準を C17 にして進めるので、安心して学んでいけます。
使用した表や図の説明
今回の解説では、表と図を使って「年表」と「使い分け」を整理しました。
それぞれの役割を補足しておきます。
表と図の役割
| 種類 | 役割 | 読み方のコツ |
|---|---|---|
| 一覧表 | バージョン全体を俯瞰する | 年・位置づけ・特徴を横に見る |
| 詳細表 | 各規格の意味を理解する | 何が変わったかに注目する |
| 推移図 | 時系列を直感的に理解する | 矢印で進化の流れを追う |
| 設定表 | 実際のGCC指定に結びつける | 学習環境にどう使うか考える |
ここまでのまとめ
C言語は、長い歴史の中で K&R C から C23 まで進化してきました。
その中でも、C17 は安定性が高く、学習の基準としてとても扱いやすいバージョンです。
最新のC23も大切ですが、まずはC17で基本をしっかり固める。
この順番にすると、あとから新しい機能を学ぶときも、違いが理解しやすくなります。
これから先の章では、GCCを使いながら、C17をベースに実際のコードを書いていきましょう。
土台がしっかりしていると、学習の伸び方がぐっと変わってきますよ。
