C言語のバージョンについて解説

C/C++

本記事では、C言語のバージョンについて解説します。

バージョンの種類

2024年においては、C言語の主要なバージョンは以下の5種類です。

  • K&R C
  • ANSI C(C89/C90)
  • ISO C(C99)
  • C11
  • C17/C18
C言語バージョンアップの時系列
  • 1978年
    K&R C

    デニス・リッチーとブライアン・カーニハン

  • 1989年
    ANSI C(C89/C90)

    アメリカ国家規格協会(ANSI)と国際標準化機構(ISO)

  • 1999年
    ISO C(C99)

    国際標準化機構(ISO)

  • 2011年
    C11

    国際標準化機構(ISO)

  • 2018年
    C17/C18

    国際標準化機構(ISO)

K&R C

最初のバージョンであるK&R Cは、1978年にデニス・リッチーブライアン・カーニハンによって開発されました。

このバージョンは、C言語の基本的な構文データ型 (int、char、floatなど)、ポインター操作構造体の導入など、現代のC言語の基盤を築いたものです。

ただし、この時点でのC言語はまだ標準化されておらず、コンパイラによって挙動が異なることがありました。

ANSI C(C89/C90)

ANSI C (C89/C90)は、1989年にアメリカ国家規格協会(ANSI)国際標準化機構(ISO)によって開発され、C言語の初めての標準化を代表します。

この標準化により、関数プロトタイプの導入標準ライブラリの大幅な強化void型の導入ヘッダファイルの標準化などが行われました。これにより、C言語はより厳格かつ移植性の高い言語へと進化しました。

ISO C(C99)

ISO C(C99)は、1999年に国際標準化機構(ISO)によって開発されたC言語の機能を大幅に拡張したバージョンです。

ここでは、関数内での変数宣言の場所をより柔軟にする、新しいデータ型(long long int、_Boolなど)の導入インライン関数のサポート可変長配列単一行コメント(//)のサポートなどが加わりました。

これらの改善により、C言語はより現代的で多機能なプログラミング言語へと成長しました。

C11

C11は、2011年にアップデートされた現代的なプログラミングの要求に応えるための新しい標準です。

このバージョンでは、マルチスレッディングのサポート_Genericキーワードによるジェネリックプログラミングの導入匿名構造体と共用体のサポート静的アサーションの追加などが行われました。

これらの機能により、C言語はより強力かつ柔軟な言語へと進化しました。

C17/C18

最新のバージョンはC17(またはC18)で、2018年にアップデートされました。

主に以前のバージョンでのバグ修正言語仕様の明確化に焦点を当てています。

新しい機能の大幅な追加はないものの、このバージョンはC言語の安定性と移植性を向上させることに貢献しました。

マルチスレッディングについて

C言語で公式にマルチスレッディングがサポートされたのはC11ですが、それ以前のC言語バージョンでも並行処理や並列処理は可能でした。

ただし、このような処理は通常、OSのAPIやサードパーティのライブラリを利用して実現されていました。

OSのAPIの利用

WindowsではWin32 API、UNIX系OSではPOSIX Threads(pthreads)を使用して、マルチスレッディングを実装していました。

サードパーティライブラリ

Boost(C++用ですが、Cプロジェクトでの使用事例もあり)や他のスレッドライブラリを使用してマルチスレッドを実現することも可能です。

プロセスベースの並行性

プロセス間通信(IPC)を使用し、複数のプロセスを起動して並行処理を行う方法もありました。

C言語のバージョンとコンパイラのバージョンの違い

混同しやすいですが、「C言語のバージョン」と「コンパイラのバージョン」は異なる概念です。

C言語のバージョン

定義

C言語のバージョンは、言語自体の標準仕様のバージョンを指します。

内容

各バージョンは、C言語の文法、データ型、標準ライブラリ、プログラミングの概念など、言語の基本的な構造と機能を定義しています。

目的

標準化されたバージョンは、プログラマーが異なる環境やプラットフォーム間で互換性のあるコードを書くのを助けます。

コンパイラのバージョン

定義

コンパイラのバージョンは、C言語をコンパイルするための特定のソフトウェア(コンパイラ)のリリースバージョンを指します。例えばGCC(GNU Compiler Collection), Clang, MSVC(Microsoft Visual C++)などがあります。

内容

コンパイラの各バージョンは、特定のC言語のバージョンをサポートし、追加の最適化、機能、プラットフォーム固有の拡張などを提供します。

目的

コンパイラは、C言語のコードを実行可能なバイナリに変換する役割を持ちます。異なるコンパイラは、パフォーマンス、エラーチェック、デバッグ機能などにおいて異なる特性を持ちます。

コンパイルについては以下の記事で解説しているので、もしよければ参考にしてみてください。

まとめ

C言語のバージョンについて見てきました。C17/C18などの新しいバージョンの方が高機能だと思われますが、C言語で書かれたシステムは古いシステムも多く、古いバージョンが使用されているものも多いです。

そのため、バージョンにこだわらずに使いこなせるようになっておくことで、様々な開発に対応できると思います。

タイトルとURLをコピーしました