C の知識:その他のライブラリ
limits.h
整数型の実際のサイズに関する情報を提供します。
- charのビット数 CHAR_BIT
- マルチバイト文字の最大ビット数 MB_LEN_MAX
- 整数型の最小値・最大値
- SCHAR_MIN SCHAR_MAX UCHAR_MAX CHAR_MIN CHAR_MAX
- SHRT_MIN SHRT_MAX USHRT_MAX
- INT_MIN INT_MAX UINT_MAX
- LONG_MIN LONG_MAX ULONG_MAX
- LLONG_MIN LLONG_MAX ULLONG_MAX
time.h
time.hは時刻を扱います。
現時刻はtimeで得られますが、time_t型となっているこれは一般に UNIX 時間で、UTC(世界協定時)1970年01月01日 00:00:00 からの経過秒数になっています。
これをポインタでlocaltimeに渡すと、以下の様な要素を持つstruct tmへのポインタが返ります。localtimeはコンピュータの設定されているタイムゾーンでの時刻になりますが、gmtimeは(名前は GMT ですが)UTC を返します。
| 要素 | 内容 | 値 |
|---|---|---|
| tm_year | 年 | (西暦 1900 年が 0) |
| tm_mon | 月 | 0 〜 11 |
| tm_mday | 日 | 1 〜 31 |
| tm_hour | 時 | 0 〜 23 |
| tm_min | 分 | 0 〜 59 |
| tm_sec | 秒 | 0 〜 60 |
| tm_wday | 曜日 | 0 〜 6 (日曜日が 0) |
| tm_yday | 元日からの 経過日数 |
0 〜 365 |
| tm_isdst | 夏時間か? | 正:夏時間 0:夏時間でない 負:不明 |
月が 0 スタートである点に注意が必要です。
mktimeはlocaltimeと逆の変換をします。また二つの日時の差はdifftimeで求められます。
stdint.h
stdint.hは処理系に依存しないサイズの数値型を提供します。
整数型
intN_tは N ビットの符号付き整数型(でパディングビットが無く 2 の補数表現のもの7.18.1.1#1)を、uintN_tは符号無し整数型を表します。
何ビットの型を実装するかは処理系次第ですが、charやintなど既にある型は定義されていなければなりません。例えば標準の整数型が「C の基本:型」の通りの範囲を持つならば、int8_tint16_tint32_tint64_tの四つとその符号無し版は必ず利用できます。
ポインタ型
intptr_tとuintptr_tは、任意のポインタの値を表現できる整数型を表します。
inttypes.h
stdint.hの型に対するフォーマット指定子を提供します。
int32_tにはPRId32マクロを、uintptr_tにはPRIuPTRマクロを、という感じで具体的には
と使います。(これらのマクロは文字列に置換され、「C の知識:リテラル」で説明した様に隣接する文字列リテラルは結合されます。)
stdarg.h
C の関数は引数の最後に, ...を付ける事で可変長引数(variable argument)を受け取れます。
stdarg.hはこの可変長引数を扱う為のマクロを提供します。
これらを使うにはまずva_listを用意し、paramNに...の直前の引数を指定します。va_argにより型を指定して一つずつ引数を取り出し、最後にはva_endを呼び出す必要があります。
具体的には
とするとsumは第一引数に指定した個数のint型整数を足し合わせる関数になり、例えばsum(3, 1, 2, 3)は 1 + 2 + 3 = 6 を返します。