標準Cライブラリ

標準Cライブラリ（ひょうじゅんシーライブラリ）は、C言語の標準規格で定められた、型・マクロ・関数の集合からなるライブラリである。
歴史.
C言語は、PascalやPL/1等の従来のプログラミング言語とは異なり、文字列操作や入出力等の基本的な機能を内蔵していなかった。やがてC言語の利用者は、現在の標準Cライブラリの原型となる概念や実装を共有するようになった。
C言語の普及に伴い、言語仕様がそうであったように、ライブラリもまた多くの方言が生まれたが、1989年（ISO/IEC 9899:1990）にANSIによるC言語の標準規格が制定されることで統一化が図られ、更にはいくつかの新たな概念が導入され、これが標準Cライブラリとなった。
その後に行われた標準規格の改定は、標準Cライブラリへの機能追加が主であった。1995年（ISO/IEC 9899/AMD1:1995）には、主としてワイド文字操作に関する関数群が大幅に追加された。また、1999年（ISO/IEC 9899:1999、C99）には、主として複素数や数学上の演算に関する関数群が大幅に追加された。2011年（ISO/IEC 9899:2011、C11）には、アライメント・マルチスレッド・Unicode・メモリ境界チェック付き関数などが追加になった。
主な機能.
標準ヘッダ.
C11 (ISO/IEC 9899:2011) では、標準ヘッダとして以下のものを定めている。
診断機能 codice_1.
ヘッダ codice_1 がインクルードされる時点における codice_3 マクロの定義状態により、実行時診断機能の有効・無効を切り替えることができる。
C11で、翻訳時に確定する式を対象にアサーションする codice_6 が追加された。
複素数 codice_7.
複素数の演算、虚数単位の定義、実部と虚部の分離機能などが含まれている。
文字操作 codice_34.
文字種別の分類、および大文字・小文字の変換を行う関数を提供する。
codice_34 ヘッダが提供する文字操作関数は、設定されているロケールに応じて動作が変わる。
エラー codice_50.
ライブラリ関数内でエラーが発生した場合、そのエラーの内容を報告するために使用するいくつかのマクロ定義。
浮動小数点型の特性 codice_58.
浮動小数点型の大きさや様々な特性を表すマクロの定義。
整数型の大きさ codice_131.
整数型の大きさを表すマクロの定義。
文化圏固有操作 codice_180.
ロケールごとに異なる、文字コード、数値を記述する場合の書式等の操作を行う型・マクロ・関数の宣言定義。
数学 codice_185.
数学的な演算を行うための関数、および関連するマクロの宣言定義。
非局所分岐 codice_212.
関数の枠組みを越えた分岐（ジャンプ）を制御するための型・マクロ・関数の宣言定義。
シグナル操作 codice_219.
シグナル処理関数の登録およびシグナルの送信に関するマクロ・型・関数の宣言定義。
可変個数の引数 codice_223.
printf 関数のような可変長引数の関数における実引数の操作に関する型とマクロの定義。
共通の定義 codice_228.
処理系に依存する型とマクロの定義。
入出力 codice_236.
ストリームおよびファイルの操作に関する型・マクロ・関数の宣言定義。
一般ユーティリティ codice_278.
一般ユーティリティに関する型・マクロ・関数の宣言定義。
文字列操作 codice_327.
文字列操作に関する型・マクロ・関数の宣言定義。
スレッド<threads.h>.
C11で追加。
日付及び時間 codice_350.
グレゴリオ暦に基づく日付等を扱うための型・マクロ・関数の宣言定義。
time_tは、特にUNIX用の実装を初めとした多くの実装において、協定世界時 (UTC) 1970年1月1日0時0分0秒からの経過秒数を符号付32ビット整数型で表すようになっている。そのような実装では2001年9月9日問題、2038年問題のような問題が生じる。詳しくは各問題の記事を参照されたい。
Unicodeユーティリティ<uchar.h>.
C11で追加。
フリースタンディング環境.
フリースタンディング環境では、C89 では標準Cライブラリのうち codice_58、codice_131、codice_223、codice_228 に対応している。ISO/IEC 9899/AMD1:1995 では加えて codice_375 が、C99 では更に codice_376 および codice_377 に対応している。
Unix系の標準Cライブラリ.
Unix系に関係するPOSIX、SUS、Linux Standard Baseなどの標準仕様では、標準Cライブラリを包含し、さらに追加の関数やマクロ、型などが規定されている。
GNU/Linux（多くのLinuxディストリビューション）では、一般的にGNU Cライブラリ (glibc) が標準Cライブラリの実装として用いられている。BSD系列での実装は、BSD libcと呼称される。
C++における標準Cライブラリ.
C++03の標準C++ライブラリでは、C95相当の標準Cライブラリを包含している。更には、C95では任意実装であったcodice_62型やcodice_86型の数学関数も常にサポートされる。C++11ではC99相当の標準Cライブラリと codice_380 を包含している。
標準Cライブラリにおけるヘッダ codice_381 は、C++では codice_382 というヘッダにマッピングされる。各識別子は codice_383 名前空間内で宣言される。また、標準Cライブラリとの互換性を持たせるため、codice_381 形式のヘッダも使用することができ、codice_383 名前空間内で宣言された識別子はcodice_386指令によってグローバル名前空間に引き出される。
C++固有の事情から、一部の関数についてはC言語との互換性が低下している。具体的にはcodice_328関数やcodice_347関数等がそれにあたる。すなわち、引数として渡されるポインタが指す型がcodice_389修飾されているか否かにより、返却値の型もそれに合わせて変更されるように多重定義されている。
Cの場合
char *strchr(const char*, int);
C++の場合
const char *strchr(const char*, int);
char *strchr(char*, int);