標準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)には、主として複素数や数学上の演算に関する関数群が大幅に追加された。2011年(ISO/IEC 9899:2011)には、アライメント・マルチスレッド・Unicode・メモリ境界チェック付き関数などが追加になった。C11 (ISO/IEC 9899:2011) では、標準ヘッダとして以下のものを定めている。ヘッダ がインクルードされる時点における NDEBUG マクロの定義状態により、実行時診断機能の有効・無効を切り替えることができる。複素数の演算、虚数単位の定義、実部と虚部の分離機能などが含まれている。文字種別の分類、および大文字・小文字の変換を行う関数を提供する。 ヘッダが提供する文字操作関数は、設定されているロケールに応じて動作が変わる。ライブラリ関数内でエラーが発生した場合、そのエラーの内容を報告するために使用するいくつかのマクロ定義。浮動小数点型の大きさや様々な特性を表すマクロの定義。整数型の大きさを表すマクロの定義。ロケールごとに異なる、文字コード、数値を記述する場合の書式等の操作を行う型・マクロ・関数の宣言定義。数学的な演算を行うための関数、および関連するマクロの宣言定義。関数の枠組みを越えた分岐(ジャンプ)を制御するための型・マクロ・関数の宣言定義。シグナル処理関数の登録およびシグナルの送信に関するマクロ・型・関数の宣言定義。printf 関数のような可変長引数の関数における実引数の操作に関する型とマクロの定義。処理系に依存する型とマクロの定義。ストリームおよびファイルの操作に関する型・マクロ・関数の宣言定義。一般ユーティリティに関する型・マクロ・関数の宣言定義。文字列操作に関する型・マクロ・関数の宣言定義。グレゴリオ暦に基づく日付等を扱うための型・マクロ・関数の宣言定義。time_tは、特にUNIX用の実装を初めとした多くの実装において、1970年1月1日0時(世界時)から経過秒数を符号付32ビット整数型で表すようになっている。そのような実装では2001年9月9日問題、2038年問題のような問題が生じる。詳しくは各問題の記事を参照されたい。フリースタンディング環境では、C89 では標準Cライブラリのうち , , および に対応している。ISO/IEC 9899/AMD1:1995 では加えて が、C99 では更に および に対応している。gccでは、glibcが標準ライブラリに相当する。C++03の標準C++ライブラリでは、C95相当の標準Cライブラリを包含している。更には、C95では任意実装であった float 型や double 型の数学関数も常にサポートされる。C++11ではC99相当の標準Cライブラリとを包含している。標準Cライブラリにおけるヘッダ は、C++では というヘッダにマッピングされる。各識別子は std 名前空間内で宣言される。また、標準Cライブラリとの互換性を持たせるため、 形式のヘッダも使用することができ、std 名前空間内で宣言された識別子はusing指令によってグローバル名前空間に引き出される。C++固有の事情から、一部の関数についてはC言語との互換性が低下している。具体的にはmemchr関数やstrstr関数等がそれにあたる。すなわち、引数として渡されるポインタが指す型がconst修飾されているか否かにより、返却値の型もそれに合わせて変更されるように多重定義されている。Cの場合C++の場合
出典:wikipedia