標準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) では、標準ヘッダとして以下のものを定めている。
ヘッダーファイル | 初出 | 概要 |
---|---|---|
assert.h |
診断機能 | |
complex.h |
C99 | 複素数計算 |
ctype.h |
文字操作 | |
errno.h |
エラー | |
fenv.h |
C99 | 浮動小数点環境 |
float.h |
浮動小数点型の特性 | |
inttypes.h |
C99 | 整数型の書式の変換 |
iso646.h |
AMD1[1] | 代替つづり(Alternate spellings) |
limits.h |
整数型の大きさ | |
locale.h |
文化圏固有操作 | |
math.h |
数学 | |
setjmp.h |
非局所分岐 | |
signal.h |
シグナル操作 | |
stdalign.h |
C11 | アライメント |
stdarg.h |
可変個数の実引数 | |
stdatomic.h |
C11 | アトミック操作 |
stdbool.h |
C99 | 論理型および論理値 |
stddef.h |
共通の定義 | |
stdint.h |
C99 | 整数型 |
stdio.h |
入出力 | |
stdlib.h |
一般ユーティリティ | |
stdnoreturn.h |
_Noreturn
| |
string.h |
文字列操作 | |
tgmath.h |
C99 | 型総称数学関数(Type-generic math) |
threads.h |
マルチスレッド | |
time.h |
日付及び時間 | |
uchar.h |
C11 | Unicodeユーティリティ |
wchar.h |
AMD1[1] | 多バイトおよびワイド文字拡張ユーティリティ |
wctype.h |
AMD1[1] | ワイド文字種分類およびワイド文字大文字小文字変換ユーティリティ |
診断機能 assert.h
編集
ヘッダ assert.h
がインクルードされる時点における NDEBUG
マクロの定義状態により、実行時診断機能の有効・無効を切り替えることができる。
assert
—NDEBUG
マクロが定義されていない場合に実行時診断を行う。
C11で、翻訳時に確定する式を対象にアサーションする static_assert
が追加された。
複素数 complex.h
編集
複素数の演算、虚数単位の定義、実部と虚部の分離機能などが含まれている。
complex
— 複素数型I
— 虚数単位cabs
— 絶対値carg
— 偏角cacos
— 逆余弦cacosh
— 逆双曲線余弦casin
— 逆正弦casinh
— 逆双曲線正弦catan
— 逆正接catanh
— 逆双曲線正接ccos
— 余弦ccosh
— 双曲線余弦cexp
— 指数関数cfabs
— 浮動小数点数の絶対値cimag
— 複素数の虚部clog
— 自然対数clog10
— 常用対数conj
— 共役複素数cpow
— 冪乗(べき乗、累乗)cproj
— リーマン球への射影creal
— 複素数の実部csin
— 正弦csinh
— 双曲線正弦csqrt
— 平方根ctan
— 正接ctanh
— 双曲線正接
文字操作 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
—1バイトの[4]ビット数(char
型を構成する>=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
— ロケールに応じた順序付けになるように文字列を変換
型総称数学関数<tgmath.h>
編集この節の加筆が望まれています。 |
スレッド<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で追加。
多バイト文字及びワイド文字拡張ユーティリティ<wchar.h>
編集この節の加筆が望まれています。 |
ワイド文字種分類及びワイド文字大文字小文字ユーティリティ<wctype.h>
編集この節の加筆が望まれています。 |
フリースタンディング環境
編集フリースタンディング環境では、C89 では標準Cライブラリのうち float.h
、limits.h
、stdarg.h
、stddef.h
に対応している。ISO/IEC 9899/AMD1:1995 では加えて iso646.h
が、C99 では更に stdbool.h
および stdint.h
に対応している。
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では任意実装であったfloat
型やdouble
型の数学関数も常にサポートされる。C++11ではC99相当の標準Cライブラリと uchar.h
を包含している。
標準Cライブラリにおけるヘッダ xyz.h
は、C++では cxyz
というヘッダにマッピングされる。各識別子は std
名前空間内で宣言される。また、標準Cライブラリとの互換性を持たせるため、xyz.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);
脚註
編集- ^ a b c ISO/IEC 9899/AMD1:1995
- ^ ISO/IEC 9899:1999 TC3 | WG14/N1256, Committee Draft | Septermber 7, 2007 | 7.5 Errors <errno.h>
- ^ ISO/IEC 9899:201x | WG14/N1548, Committee Draft | December 2, 2010 | 7.5 Errors <errno.h>
- ^ 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>