C言語のきほん|C言語のバージョン

C言語のバージョンを知ると、学ぶべき基準と使い分けがはっきりわかる。

C言語は、1970年代に生まれてからずっと使われ続けている、とても息の長い言語です。
でも、ずっと同じ形のままではなく、時代に合わせて少しずつ改良されてきました。

その改良の区切りが、C89、C99、C11、C17、C23 などの「バージョン(規格)」です。
この規格を知っておくと、学習中に見かける機能の違いや、コンパイラの設定、サンプルコードの書き方の意味がわかりやすくなります。

ここでは、C言語の主要なバージョンを表や図で整理しながら、なぜこのサイトでは C17 を基準に学ぶのか まで、やさしくしっかり解説していきます。

まずは「C言語のバージョン」とは何か

C言語のバージョンは、ゲームやアプリのアップデート番号のようなものではなく、標準規格の版 です。
つまり、「C言語としてこう書けばよい」という共通ルールを、国際的に整理したものです。

バージョン(規格)を学ぶ意味

観点わかること
互換性どの書き方がどの環境で使えるか
学習の安心感教材の基準が明確になる
実務での判断新機能を使うか、安定性を優先するか判断しやすい
コンパイラ設定GCCなどでどの規格を指定するか理解できる

この表のポイントは、バージョンの知識が単なる歴史の暗記ではなく、実際にコードを書くときに役立つ知識 だということです。

C言語の主要なバージョンを一覧で整理する

まずは、本文に出てきた主要バージョンを見やすく一覧にしておきます。

C言語の主要バージョン一覧

バージョン位置づけざっくり特徴
K&R C1978初期の実質標準書籍ベースで広まった初期C
ANSI C(C89)1989最初の標準規格仕様が整理され、標準化が進む
C991999大きめの拡張書きやすさ・表現力が向上
C112011安全性・並列処理強化スレッド対応や安全面の改善
C172018安定化版C11の修正・明確化が中心
C232024最新規格新機能追加と現代的な改善

ここでは細かい機能名よりも、どの版が「新機能追加」寄りで、どの版が「安定化」寄りか を見るのがコツです。

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=c17C17の標準規格としてコンパイル
-std=gnu17C17 + GCC拡張を有効にする
-std=c11C11としてコンパイル
-std=c23C23としてコンパイル(環境の対応状況に注意)

ポイントは、同じC言語でも規格指定で扱いが変わる ことです。
学習中に「このコードが通らない」というとき、規格の違いが原因になることもあります。

各バージョンをどう使い分けるか

最後に、学習と実務の視点でざっくり使い分けを整理しておきます。

学習・実務での使い分けイメージ

場面おすすめの考え方
入門学習C17を基準にする
古い資料を読むC89/C99の記法も見かける前提で読む
最新情報を追うC23の新機能を少しずつ取り入れる
実務プロジェクトの規約・コンパイラ対応に合わせる

大事なのは、どのバージョンが絶対に正しいというより、目的に合わせて基準を決める ことです。
この教材では、その基準を C17 にして進めるので、安心して学んでいけます。

使用した表や図の説明

今回の解説では、表と図を使って「年表」と「使い分け」を整理しました。
それぞれの役割を補足しておきます。

表と図の役割

種類役割読み方のコツ
一覧表バージョン全体を俯瞰する年・位置づけ・特徴を横に見る
詳細表各規格の意味を理解する何が変わったかに注目する
推移図時系列を直感的に理解する矢印で進化の流れを追う
設定表実際のGCC指定に結びつける学習環境にどう使うか考える

ここまでのまとめ

C言語は、長い歴史の中で K&R C から C23 まで進化してきました。
その中でも、C17 は安定性が高く、学習の基準としてとても扱いやすいバージョンです。

最新のC23も大切ですが、まずはC17で基本をしっかり固める。
この順番にすると、あとから新しい機能を学ぶときも、違いが理解しやすくなります。

これから先の章では、GCCを使いながら、C17をベースに実際のコードを書いていきましょう。
土台がしっかりしていると、学習の伸び方がぐっと変わってきますよ。