今回から「モダンC++プログラマーのためのC11入門」の連載を始めます。C言語にはいくつかのバージョンがありますが、この連載では、普段C++11以降の「モダンC++」を使っているプログラマーを対象に、C言語の第3版の規格にあたるC11を解説することにします。(ちょっと使いにくいですが)コメントやメール、Twitterで質問や感想をお寄せいただければ、何らかの形でフィードバックしたいと思いますので、よろしくお願いします。
C11について
C言語の歴史は古く、標準規格に限ってもいくつかのバージョンがありますが、この番外編では、第3版にあたるC11を対象にします。C言語のバージョンについての詳細な情報は、当サイトの別の記事である「C言語再入門」の第1回 C言語とはを参照してください。
C++14までの標準CライブラリはC99をベースにしています。C++17以降の標準ライブラリはC11やC17をベースにしています。C11とC17は機能的な違いはありませんので、本連載ではとくに区別していません。
C11では、C99のライブラリを完全に包含し、さらにマルチスレッドのような重要な機能が追加されています。C11で追加されたライブラと同等の機能はC++11でC++でも追加されましたが、同じ目的のライブラリが異なる形で提供されることになり、CとC++の乖離が大きくなりました。
PC向けの処理系では比較的C11の普及は早く進みました。GCCなどではかなり前からC11がデフォルトになっています。
どの環境を対象にするか
本連載では、特定の環境に依存するのではなく、可能なかぎり一般的な内容にしたいと思います。ただし、具体例を挙げるために必要な場合には、特定環境を取り上げる可能性はあります。その場合は、都度どんな環境を想定しているかを明記するようにします。
なお、特定の環境には依存しないといっても、フリースタンディング環境かホスト環境かは区別しなければなりません。フリースタンディング環境というのは、C++でいうところの「自立処理系」の環境であり、ホスト環境というのは、C++でいうところの「依存処理系」の環境のことです。本連載では、特に指定がない場合はホスト環境を想定します。フリースタンディング環境については、それを解説する回を設けたいと思います。