[UNIX、Linux、Windows]

UNIXLinux、および Windows での標準データ・タイプ

32 ビット UNIX および Linux®、64 ビット UNIX および Linux、および 64 ビット Windows アプリケーションでの標準データ型について説明します。

[UNIX][Linux]

32 ビット UNIX および Linux アプリケーション

このセクションは比較のために組み込まれており、 Solarisに基づいています。 他の UNIX プラットフォームにおける相違点については、注記してあります。
表 1. データ・タイプ名および長さ
名前 長さ
char 1 バイト
short 2 バイト
int 4 バイト
long 4 バイト
float 4 バイト
double 8 バイト
long double 16 バイト

[AIX][Linux] AIX® および Linux PPC では、long double は 8 バイトであることに注意してください。

pointer 4 バイト
ptrdiff_t 4 バイト
size_t 4 バイト
time_t 4 バイト
clock_t 4 バイト
wchar_t 4 バイト

[AIX] AIX では、wchar_t は 2 バイトであることに注意してください。

[UNIX][Linux]

64 ビット UNIX および Linux アプリケーション

このセクションは、 Solarisに基づいています。 他の UNIX プラットフォームにおける相違点については、注記してあります。
表 2. データ・タイプ名および長さ
名前 長さ
char 1 バイト
short 2 バイト
int 4 バイト
long 8 バイト
float 4 バイト
double 8 バイト
long double 16 バイト

[AIX][Linux] AIX および Linux PPC では、long double は 8 バイトであることに注意してください。

pointer 8 バイト
ptrdiff_t 8 バイト
size_t 8 バイト
time_t 8 バイト
clock_t 8 バイト

他の UNIX プラットフォームでは、clock_t は 4 バイトであることに注意してください。

wchar_t 4 バイト

[AIX] AIX では、wchar_t は 2 バイトであることに注意してください。

[Windows]

Windows 64 ビット・アプリケーション

表 3. データ・タイプ名および長さ
名前 長さ
char 1 バイト
short 2 バイト
int 4 バイト
long 4 バイト
float 4 バイト
double 8 バイト
long double 8 バイト
pointer 8 バイト

注: pointer はすべて 8 バイトです。

ptrdiff_t 8 バイト
size_t 8 バイト
time_t 8 バイト
clock_t 4 バイト
wchar_t 2 バイト
WORD 2 バイト
DWORD 4 バイト
HANDLE 8 バイト
HFILE 4 バイト
[Windows]

Windows におけるコーディングの考慮事項

HANDLE hf;
以下を使用してください。

hf = CreateFile((LPCTSTR) FileName,
                Access,
                ShareMode,
                xihSecAttsNTRestrict,
                Create,
                AttrAndFlags,
                NULL);
以下は使用しないでください。

HFILE hf;
hf = (HFILE) CreateFile((LPCTSTR) FileName,
                        Access,
                        ShareMode,
                        xihSecAttsNTRestrict,
                        Create,
                        AttrAndFlags,
                        NULL);
このコードでは、エラーが発生します。
size_t len fgets
以下を使用してください。

size_t len
while (fgets(string1, (int) len, fp) != NULL)
len = strlen(buffer);
以下は使用しないでください。

int len;

while (fgets(string1, len, fp) != NULL)
len = strlen(buffer);
printf
以下を使用してください。

printf("My struc pointer: %p", pMyStruc);
以下は使用しないでください。

printf("My struc pointer: %x", pMyStruc);
16 進数出力を必要とする場合、上位および下位の 4 バイトを別個にプリントする必要があります。
char *ptr
以下を使用してください。

char * ptr1;
char * ptr2;
size_t bufLen;

bufLen = ptr2 - ptr1;
以下は使用しないでください。

char *ptr1;
char *ptr2;
UINT32 bufLen;

bufLen = ptr2 - ptr1;
alignBytes
以下を使用してください。

alignBytes = (unsigned short) ((size_t) address % 16);
以下は使用しないでください。

void *address;
unsigned short alignBytes;

alignBytes = (unsigned short) ((UINT32) address % 16);
len
以下を使用してください。

len = (UINT32) ((char *) address2 - (char *) address1);
以下は使用しないでください。

void *address1;
void *address2;
UINT32 len;

len = (UINT32) ((char *) address2 - (char *) address1);
sscanf
以下を使用してください。

MQLONG SBCSprt;

sscanf(line, "%d", &SBCSprt);
以下は使用しないでください。

MQLONG SBCSprt;

sscanf(line, "%1d", &SBCSprt);

%ld は、8 バイトの型を 4 バイトの型に書き込もうとします。%l は、実際に long データ・タイプを取り扱う場合にのみ使用してください。 MQLONG、 UINT32 、および INT32 は、すべての IBM® MQ プラットフォーム上の int と同じ 4 バイトとして定義されます。