C言語 共通の型定義 - stddef.h - [ offsetof, NULL, size_t, wchar_t, ptrdiff_t ]

2008.09.11 Thursday | by LRESULT


stddef.hでは、共通の型とマクロ定義があります。

何が共通なんだという話ですが、
どうやら、標準ライブラリ内で共通に使用される(インクルードされる)
、という意味らしいです。


共通定義
NULL ヌルポインタ
どのアドレスも指していないポインタ
size_t sizeof演算子やstrlen()での戻り値の型
int型でも良いが、長さを明示的に表す為にあります
wchar_t ワイド文字型
unsigned short型で定義されています
2バイト文字を表す為にあります
ptrdiff_t ポインタ同士の引き算の結果の型
int型でも良いが、同じ配列で、要素同士が
どれくらい離れているかを表す為にあります



offsetof
書式 size_t offsetof( struct_name, member_name )
機能 構造体内で指定メンバまでのバイト数
引数 struct_name : 構造体名
member_name : メンバ名
戻り値 指定されたメンバまでのバイト数を返します。





サンプルコード
offsetof()マクロを使用して、構造体の指定されたメンバまで
どれだけバイト数があるか調べてみます。
#include <stdio.h>
#include <stddef.h>

struct test{
  int a;
  float b;
  double c;
  int d;
};

int main(void)
{
  size_t sz = offsetof( struct test, d );
  printf( "%d¥n", sz );

  return 0;
}



結果
16
struct test型には、4バイトのint, float型と
8バイトのdouble型があります。
構造体のメンバ「d」までに16バイトがあることが分かります。

カテゴリ:C言語 stddef.h | 21:15 | comments(1) | trackbacks(0) | -


コメント

管理者の承認待ちコメントです。

| - | 2011/04/01 6:38 PM |

コメントする











この記事のトラックバックURL

トラックバック機能は終了しました。

トラックバック