[C言語 標準ライブラリ] stddef.hの使い方

※本ブログでは、商品・サービスのリンク先にプロモーションを含みます。

スポンサーリンク

stddef.hには標準ライブラリで扱う共通のマクロ、型が定義されています。

スポンサーリンク

マクロ定数

NULL

空(ヌル)ポインタ定数です。
locale.h、stdio.h、stdlib.h、string.h、time.h、wchar.hヘッダでも定義されています。

ptrdiff_t

2つのポインタを減算した結果の符号付き整数型です。

size_t

sizeof演算子の結果を表すための符号無し整数型です。
メモリ領域のオブジェクトサイズを表すのに適しており、配列の要素を参照する際に使用します。
stdio.h、stdlib.h、string.h、time.h、wchar.hヘッダでも定義されています。

wchar_t

8bit以上のワイド文字型として扱います。(Windows系は16bit、Unix系は32bitの場合が多い)
実際は、サポートされているロケールで指定されている最大の拡張文字セットのすべてのメンバーの個別コードを表すことができる整数型となっています。
stdlib.h、wchar.hヘッダでも定義されています。

マクロ関数

offsetof(type, member-designator)

size_t型の値を返す定数式に展開されます。
typeに指定した構造体の先頭から、member-designatorに指定した構造体メンバまでの、バイトオフセット値が返されます。
指定されたメンバがビットフィールドの場合、その動作は未定義(実装依存)となります。

使用例:

#include <stddef.h>
#include <stdio.h>

typedef struct{
    int    a;
    double b;
    char   c;
}TD_ST;

int main(void)
{
    printf("メンバaのバイトオフセット = %d\n", offsetof(TD_ST, a));
    printf("メンバbのバイトオフセット = %d\n", offsetof(TD_ST, b));
    printf("メンバcのバイトオフセット = %d\n", offsetof(TD_ST, c));

    return 0;
}

実行結果:

メンバaのバイトオフセット = 0
メンバbのバイトオフセット = 8
メンバcのバイトオフセット = 16
スポンサーリンク
C言語

コメント