このヘッダの目的
<stddef.h>は、基本的なマクロや定数を定義する。
定義済み識別子
NULL
ptrdiff_t
size_t
wchar_t
働き
NULL
は、ヌルポインタである。 null とは、ドイツ語でゼロのことであり、メモリ上の「何もない」場所を指し示すポインタである。
この値は通常 0
であるが、 ((void*)0)
と展開される処理系もある。
offsetofマクロは、このように使われる。
offsetof(type, member-designator)
ここでtypeとは構造体型の型名であり、member-designatorは構造体のメンバの名前である。
このマクロは、member-designatorがtypeの先頭から何バイト目にあるかというsize_t型の数値になる。
ptrdiff_t
は、ポインタの引き算をした結果の型であり、符号付きの整数型である。
C 言語ではポインタ同士の引き算をすることができ、その結果はポインタの指すオブジェクトのサイズで測って何個分離れているかということになる。
例えば、下のようにポインタが配列の何番目の要素を指しているのかを求めることができる。
int array[8]; int *p = &array[5]; printf("%d", (int)(p - array)); /* 5 */
これは、ポインタと整数の足し算が、ポインタをオブジェクトのサイズ掛ける整数分だけ移動したものになることに対応している。
(ref. a[b] == *(a + (b))
)
size_t
は、 sizeof 演算子の結果の型である。これは符号なし整数型である。
wchar_t
(ワイド文字型)は、サポートされている全ての地域言語のどんな文字も一意的に収納することのできる値の幅を持つ整数型であり、
ヌル文字は0、ソースコードで使われる基本文字セットは文字定数としてのその値がワイド文字に相当する。