標準Cライブラリ

標準Cライブラリ(ひょうじゅんシーライブラリ)は、C言語の標準規格で定められた、マクロ関数の集合からなるライブラリである。

歴史

C言語は、PascalPL/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) では、標準ヘッダとして以下のものを定めている。

ISO/IEC 9899:2011(C11) の定める標準ヘッダ一覧
ヘッダーファイル初出概要
assert.h診断機能
complex.hC99複素数計算
ctype.h文字操作
errno.hエラー
fenv.hC99浮動小数点環境
float.h浮動小数点型の特性
inttypes.hC99整数型の書式の変換
iso646.hAMD1[1]代替つづり(Alternate spellings)
limits.h整数型の大きさ
locale.h文化圏固有操作
math.h数学
setjmp.h非局所分岐
signal.hシグナル操作
stdalign.hC11アライメント
stdarg.h可変個数の実引数
stdatomic.hC11アトミック操作
stdbool.hC99論理型および論理値
stddef.h共通の定義
stdint.hC99整数型
stdio.h入出力
stdlib.h一般ユーティリティ
stdnoreturn.h_Noreturn
string.h文字列操作
tgmath.hC99型総称数学関数(Type-generic math)
threads.hマルチスレッド
time.h日付及び時間
uchar.hC11Unicodeユーティリティ
wchar.hAMD1[1]多バイトおよびワイド文字拡張ユーティリティ
wctype.hAMD1[1]ワイド文字種分類およびワイド文字大文字小文字変換ユーティリティ

診断機能 assert.h

ヘッダ assert.hインクルードされる時点における NDEBUG マクロの定義状態により、実行時診断機能の有効・無効を切り替えることができる。

  • assert NDEBUG マクロが定義されていない場合に実行時診断を行う。

C11で、翻訳時に確定する式を対象にアサーションする static_assert が追加された。

複素数 complex.h

複素数の演算、虚数単位の定義、実部と虚部の分離機能などが含まれている。

文字操作 ctype.h

文字種別の分類、および大文字・小文字の変換を行う関数を提供する。 ctype.h ヘッダが提供する文字操作関数は、設定されているロケールに応じて動作が変わる。

  • isalnum 英数字かどうかの判別
  • isalpha 英字かどうかの判別
  • isblank 単語を区切る文字かどうかの判定
  • iscntrl 制御文字かどうかの判別
  • isdigit 数字かどうかの判別
  • isgraph 空白(' ')を除く表示文字かどうかの判別
  • islower 小文字かどうかの判別
  • isprint 表示文字かどうかの判別
  • ispunct 区切り文字かどうかの判別
  • isspace 空白類文字かどうかの判別
  • isupper 大文字かどうかの判別
  • isxdigit 16進数字かどうかの判別
  • tolower 小文字への変換
  • toupper 大文字への変換

エラー errno.h

ライブラリ関数内でエラーが発生した場合、そのエラーの内容を報告するために使用するいくつかのマクロ定義。

  • errno エラー番号を格納するint型の変数を参照するマクロ。マクロであるが、見かけ上はint型の変更可能な左辺値式に展開される[2](例えば(*get_errno_address())のような左辺値式に展開されるかもしれない)。C11以降でスレッドが標準化されたことに伴い、スレッドローカルな記憶域期間 (thread local storage duration) を持つことが規定された[3]
  • EDOM 定義域エラー
  • ERANGE 範囲エラー
  • EILSEQ 多バイト文字の不正な並び

浮動小数点型の特性 float.h

浮動小数点型の大きさや様々な特性を表すマクロの定義。

  • FLT_RADIX 浮動小数点型の内部表現に使用される基数
  • FLT_ROUNDS 浮動小数点型の丸め方向
  • FLT_MANT_DIG float型のFLT_RADIXを基数とした仮数部の桁数
  • FLT_MAX_EXP float 型におけるFLT_RADIXを基数とした指数部の最大値
  • FLT_MIN_EXP float 型におけるFLT_RADIXを基数とした指数部の最小値
  • FLT_MAX_10_EXP float 型における10を基数とした指数部の最大値
  • FLT_MIN_10_EXP float 型における10を基数とした指数部の最小値
  • FLT_MAX float 型の最大値
  • FLT_MIN float 型の正の値の最小値(整数型とは違いfloat型の実数の最小値は-FLT_MAXである)
  • FLT_EPSILON float型で表現可能な1より大きい最小値と1との差(計算機イプシロン
  • DBL_MANT_DIG double 型のFLT_RADIXを基数とした仮数部の桁数
  • DBL_MAX_EXP double 型におけるFLT_RADIXを基数とした指数部の最大値
  • DBL_MIN_EXP double型におけるFLT_RADIXを基数とした指数部の最小値
  • DBL_MAX_10_EXP double型における10を基数とした指数部の最大値
  • DBL_MIN_10_EXP double 型における10を基数とした指数部の最小値
  • DBL_MAX double型の最大値
  • DBL_MIN double型の正の値の最小値(整数型とは違いdouble型の実数の最小値は-DBL_MAXである)
  • DBL_EPSILON double 型で表現可能な1より大きい最小値と1との差
  • LDBL_MANT_DIG long double 型の FLT_RADIX を基数とした仮数部の桁数
  • LDBL_MAX_EXP long double 型における FLT_RADIX を基数とした指数部の最大値
  • LDBL_MIN_EXP long double 型における FLT_RADIX を基数とした指数部の最小値
  • LDBL_MAX_10_EXP long double 型における10を基数とした指数部の最大値
  • LDBL_MIN_10_EXP long double 型における10を基数とした指数部の最小値
  • LDBL_MAX long double 型の最大値
  • LDBL_MIN long double 型の最小値
  • LDBL_EPSILON long double 型で表現可能な1より大きい最小値と1との差

整数型の大きさ limits.h

整数型の大きさを表すマクロの定義。

  • CHAR_BIT char型を構成する1バイトの[4]ビット数(>=8
  • MB_LEN_MAX 処理系がサポートするマルチバイト文字の最大バイト数
  • CHAR_MAX char型の最大値。SCHAR_MAX または UCHAR_MAX と同じ
  • CHAR_MIN char型の最小値。SCHAR_MIN または 0 と同じ
  • SCHAR_MAX signed char 型の最大値(>=127
  • SCHAR_MIN signed char 型の最小値(<=-127
  • UCHAR_MAX unsigned char 型の最大値(>=255
  • SHRT_MAX short型の最大値(>=32767
  • SHRT_MIN short型の最小値(<=-32767
  • USHRT_MAX unsigned short型の最大値(>=65535
  • INT_MAX int型の最大値(>=32767
  • INT_MIN int型の最小値(<=-32767
  • UINT_MAX unsigned int型の最大値(>=65535
  • LONG_MAX long型の最大値(>=2147483647
  • LONG_MIN long型の最小値(<=-2147483647
  • ULONG_MAX unsigned long型の最大値(>=4294967295

文化圏固有操作 locale.h

ロケールごとに異なる、文字コード、数値を記述する場合の書式等の操作を行う型・マクロ・関数の宣言定義。

  • struct lconv 数値を記述する場合の書式に関する情報を格納する構造体
  • localeconv 設定されているロケールに応じた値を格納した struct lconvを参照
  • setlocale 現在のロケールを設定

数学 math.h

数学的な演算を行うための関数、および関連するマクロの宣言定義。

  • HUGE_VAL float型で表現できるとは限らない正のdouble型の式。無限大またはそれに類する大きな値
  • acos 逆余弦
  • asin 逆正弦
  • atan 逆正接
  • atan2 底辺と高さを指定した直角三角形の逆正接
  • ceil 天井関数
  • cos 余弦
  • cosh 双曲線余弦
  • exp 指数関数
  • fabs 浮動小数点数の絶対値
  • floor 床関数
  • fmod 浮動小数点どうしの商と剰余
  • frexp 「正規化された仮数部」と「2の累乗」への分解
  • ldexp 浮動小数点数と2の累乗との乗算
  • log 自然対数
  • log10 常用対数
  • modf 整数部と小数部の分解
  • pow 冪乗(べき乗、累乗)
  • sin 正弦
  • sinh 双曲線正弦
  • sqrt 平方根
  • tan 三角関数|正接
  • tanh 双曲線関数|双曲線正接

非局所分岐 setjmp.h

関数の枠組みを越えた分岐(ジャンプ)を制御するための型・マクロ・関数の宣言定義。

  • jmp_buf setjmp マクロが実行環境を保存するための型
  • setjmp longjmp 関数による復帰を可能にするために実行環境を保存するためのマクロ(しばしば直接、関数で実装されているが、標準ではマクロとされている。POSIXではマクロか関数かは指定されない、としている)
  • longjmp setjmp マクロで保存された環境への復帰

シグナル操作 signal.h

シグナル処理関数の登録およびシグナルの送信に関するマクロ・型・関数の宣言定義。

  • sig_atomic_t 代入および参照が不分割に実行される(アトミックオペレーションとなる)整数型
  • raise シグナルの送信
  • signal シグナル処理関数の登録

可変個数の引数 stdarg.h

printf 関数のような可変長引数の関数における実引数の操作に関する型とマクロの定義。

  • va_list 可変個の実引数にアクセスするための情報を格納する型
  • va_arg 可変個の実引数の取り出し
  • va_start 可変個の実引数操作の開始
  • va_end 可変個の実引数操作の終了

共通の定義 stddef.h

処理系に依存する型とマクロの定義。

  • ptrdiff_t ポインタ減算の結果の型。符号付き整数型。
  • size_t sizeof 演算子の結果の型。符号無し整数型。Unix 系など、POSIX 1003.1-1996 API に準拠している場合、ssize_tが符号付きのsize_t
  • wchar_t ワイド文字型。8ビット以上の整数だが、コンパイラやプラットフォームにより大きさは様々。Microsoft Windowsでは16ビット、Unix系では32ビットであることが多い。
  • NULL 空ポインタ定数マクロ
  • offsetof 構造体メンバの先頭からのオフセットを得る

入出力 stdio.h

ストリームおよびファイルの操作に関する型・マクロ・関数の宣言定義。

  • FILE ストリームを制御するためのオブジェクト型(構造体とは限らない)
  • fpos_t ファイルのシーク位置を格納するための型
  • clearerr ファイル終端表示子およびエラー表示子のクリア
  • fclose ファイルのクローズ
  • feof ファイル終端表示子の判定
  • ferror エラー表示子の判定
  • fgetc ストリームからの1文字入力
  • fgetpos ストリームのファイル位置表示子の参照
  • fgets ストリームからの1行入力
  • fopen ファイルのオープン
  • fprintf ストリームへの書式付き出力
  • fputc ストリームへの1文字出力
  • fputs ストリームへの1行出力
  • fread ストリームからの読み込み
  • fscanf ストリームからの書式付き入力
  • fseek ストリームのファイル位置表示子の変更
  • fsetpos ストリームのファイル位置表示子の設定
  • ftell ストリームのファイル位置表示子の参照
  • fwrite ストリームへの書き込み
  • getc ストリームからの1文字入力
  • getchar 標準入力からの1文字入力
  • gets 標準入力からの1行入力(ただし、C11で削除された)
  • perror 標準エラー出力へのエラーメッセージの出力
  • printf 標準出力への書式付き出力
  • putc ストリームへの1文字出力
  • putchar 標準出力への1文字出力
  • puts 標準出力への1行出力
  • remove ファイルの削除
  • rename ファイル名の変更
  • rewind ストリームの巻き戻し
  • scanf 標準入力からの書式付き入力
  • setbuf ストリームのバッファ設定
  • setvbuf ストリームの詳細なバッファ設定
  • sprintf 文字配列への書式付き出力
  • sscanf 文字列からの書式付き入力
  • tmpfile テンポラリファイルをバイナリモードでオープン
  • tmpnam テンポラリファイル名の生成
  • vprintf 標準出力への書式付き出力(va_list版)
  • vscanf 標準入力からの書式付き入力(va_list版)

一般ユーティリティ stdlib.h

一般ユーティリティに関する型・マクロ・関数の宣言定義。

  • div_t int型の商と剰余を格納する構造体
  • ldiv_t long型の商と剰余を格納する構造体
  • MB_CUR_MAX 設定されているロケールにおけるマルチバイト文字の最大バイト数を表すマクロ
  • RAND_MAX rand関数が返す擬似乱数の最大値
  • abort プログラムの異常終了
  • abs int型の絶対値
  • aligned_alloc アライメントされたメモリブロックの割り付け(C11で追加)
  • atexit 終了時関数の登録
  • at_quick_exit 通常の終了時関数の登録(C11で追加)
  • atof 文字列からdouble型への変換
  • atoi 文字列からint型への変換
  • atol 文字列からlong型への変換
  • bsearch バイナリサーチ
  • calloc メモリブロックの割り付けとクリア
  • div int型どうしの商と剰余
  • exit プログラムの終了
  • free メモリブロックの解放
  • getenv 環境変数の参照
  • labs long型の絶対値
  • ldiv long型どうしの商と剰余
  • malloc メモリブロックの割り付け
  • mblen マルチバイト文字の構成バイト数
  • mbstowcs マルチバイト文字列からワイド文字列への変換
  • mbtowc マルチバイト文字からワイド文字への変換
  • qsort クイックソート (ただし、仕様上はソートを行うとあるだけで「クイックソートによる」とは書かれていない)
  • quick_exit 通常のプログラムの終了(C11で追加)
  • rand 擬似乱数
  • realloc メモリブロックの再割り付け
  • srand 乱数種の設定
  • strtod 文字列からdouble型への変換
  • strtol 文字列からlong型への変換(基数指定可)
  • strtoul 文字列からunsigned long型への変換(基数指定可)
  • system コマンドプロセッサの呼び出し
  • wcstombs ワイド文字列からマルチバイト文字列への変換
  • wctomb ワイド文字列からマルチバイト文字列への変換

文字列操作 string.h

文字列操作に関する型・マクロ・関数の宣言定義。

  • memchr メモリブロック中の文字検索
  • memcmp メモリブロックの比較
  • memcpy メモリブロックのコピー
  • memmove メモリブロックの転送
  • memset メモリブロックを指定文字で埋める
  • strchr 文字列内の文字探索
  • strcat 文字列の連結
  • strcmp 文字列の比較
  • strcpy 文字列のコピー
  • strcspn 文字列中の指定文字群を含まない先頭部分の長さ
  • strerror エラー番号に対応したエラーメッセージ文字列の取得
  • strcoll ロケールに応じた順序付けによる文字列の比較
  • strlen 文字列の長さ
  • strncat 字数制限付きで文字列の連結
  • strncmp 字数制限付きで文字列の比較
  • strncpy 字数制限付きで文字列のコピー
  • strpbrk 文字列中の文字群探索
  • strrchr 文字列内の逆方向文字探索
  • strspn 文字列中の指定文字群を含む先頭部分の長さ
  • strstr 文字列中の文字列探索
  • strtok 文字列からの字句切り出し
  • strxfrm ロケールに応じた順序付けになるように文字列を変換

スレッド<threads.h>

C11で追加。

日付及び時間 time.h

グレゴリオ暦に基づく日付等を扱うための型・マクロ・関数の宣言定義。

  • clock_t clock 関数が返す値の型
  • time_t 時刻を表す型
  • struct tm 暦時刻の各要素(年月日時分秒等)を格納する構造体
  • CLOCKS_PER_SEC clock関数が返す値を秒単位に変換するための除数を表すマクロ定数
  • asctime tm構造体から文字列への変換
  • clock 処理系定義の開始点(通例プログラム実行開始)からの経過時間(プロセッサ時間、CPU使用時間)の取得
  • ctime time_t型から文字列への変換
  • difftime time_t型どうしの秒単位での差
  • gmtime 協定世界時 (UTC) の取得
  • localtime 地方時刻の取得
  • mktime tm構造体から time_t型への変換
  • strftime tm構造体から文字列への書式付き変換
  • time 現在の暦時刻 (calendar time) の取得

time_tは、特にUNIX用の実装を初めとした多くの実装において、協定世界時 (UTC) 1970年1月1日0時0分0秒からの経過秒数を符号付32ビット整数型で表すようになっている。そのような実装では2001年9月9日問題2038年問題のような問題が生じる。詳しくは各問題の記事を参照されたい。

Unicodeユーティリティ<uchar.h>

C11で追加。

フリースタンディング環境

フリースタンディング環境では、C89 では標準Cライブラリのうち float.hlimits.hstdarg.hstddef.h に対応している。ISO/IEC 9899/AMD1:1995 では加えて iso646.h が、C99 では更に stdbool.h および stdint.h に対応している。

Unix系の標準Cライブラリ

Unix系に関係するPOSIXSUSLinux Standard Baseなどの標準仕様では、標準Cライブラリを包含し、さらに追加の関数やマクロ、型などが規定されている。

GNU/Linux(多くのLinuxディストリビューション)では、一般的にGNU Cライブラリ (glibc) が標準Cライブラリの実装として用いられている。BSD系列での実装は、BSD libcと呼称される。

C++における標準Cライブラリ

C++03の標準C++ライブラリでは、C95相当の標準Cライブラリを包含している。更には、C95では任意実装であったfloat型やdouble型の数学関数も常にサポートされる。C++11ではC99相当の標準Cライブラリと uchar.h を包含している。

標準Cライブラリにおけるヘッダ xxx.h は、C++では cxxx というヘッダにマッピングされる。各識別子は std 名前空間内で宣言される。また、標準Cライブラリとの互換性を持たせるため、xxx.h 形式のヘッダも使用することができ、std 名前空間内で宣言された識別子はusing指令によってグローバル名前空間に引き出される。

C++固有の事情から、一部の関数についてはC言語との互換性が低下している。具体的にはmemchr関数やstrstr関数等がそれにあたる。すなわち、引数として渡されるポインタが指す型がconst修飾されているか否かにより、返却値の型もそれに合わせて変更されるように多重定義されている。

Cの場合

char *strchr(const char*, int);

C++の場合

const char *strchr(const char*, int);
char *strchr(char*, int);

脚註

  1. ISO/IEC 9899/AMD1:1995
  2. ISO/IEC 9899:1999 TC3 | WG14/N1256, Committee Draft | Septermber 7, 2007 | 7.5 Errors <errno.h>
  3. ISO/IEC 9899:201x | WG14/N1548, Committee Draft | December 2, 2010 | 7.5 Errors <errno.h>
  4. N2596 working draft — December 11, 2020 ISO/IEC 9899:202x (E). ISO/IEC JTC1/SC22/WG14. p. 20, §5.2.4.2.1 Characteristics of integer types <limits.h>. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2596.pdf

外部リンク

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.