ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
C/C++で、ポインター同士の減算結果を表わす型。二つのポインター間の距離を表わす。
#include <stddef.h>
定義は後述。
#include <cstddef>
定義は後述。
Linuxのユーザー空間で、gcc 4.4の場合は、次のように定義されている。
/usr/lib/gcc/x86_64-linux-gnu/4.4/include/stddef.h
#define __PTRDIFF_TYPE__ long int typedef __PTRDIFF_TYPE__ ptrdiff_t;
様々な環境に対応できるよう大量の#ifndefの中に埋もれているが、特に特殊な定義がない場合、x86の64ビットでは間接的にlong intつまりlongで定義されている。
FreeBSDでは、次のように定義される。
stddef.h
typedef __ptrdiff_t ptrdiff_t;
64ビットのFreeBSD(x64用)では、sys/amd64/include/_types.h で次のように定義される。
typedef long __int64_t; typedef __int64_t __ptrdiff_t; /* ptr1 - ptr2 */
32ビットのFreeBSD(x86用)では、sys/i386/include/_types.h で次のように定義される。
typedef int __int32_t; typedef __int32_t __ptrdiff_t; /* ptr1 - ptr2 */
つまり、32ビット環境なら32ビット長のint型、64ビット環境なら64ビット長のlong型となる。
Linuxカーネルでは、次のようにして使う。
#incluce <linux/types.h>
定義は、/usr/src/linux-headers-2.6.XX-XX/include/linux/types.h などにある。
typedef __kernel_ptrdiff_t ptrdiff_t;
__kernel_size_tの定義は環境ごとに様々であるが、代表的な環境(x86とARM)では次のようになっている。
x86の32ビットの場合、arch/x86/include/asm/posix_types_32.h で定義される。
typedef int __kernel_ptrdiff_t;
x86の64ビットの場合、arch/x86/include/asm/posix_types_64.h で定義される。
typedef long __kernel_ptrdiff_t;
ARMの32ビットの場合、arch/arm/include/asm/posix_types.h で定義される。
typedef int __kernel_ptrdiff_t;
概ね、32ビットならint、64ビットならlongで定義されている。その目的から、概ねアドレス長程度の長さが定義されると思われるが、但し符号付きである点に注意が必要である。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます