標準データ型
32 ビット UNIX、64 ビット UNIX、および 64 ビット Windows アプリケーションにおける標準データ型について学習します。
32 ビットの UNIX アプリケーション
このセクションの内容は比較のために掲載されており、Solaris を基準にしています。他の UNIX プラットフォームにおける相違点については、注記してあります。
名前 | 長さ |
---|---|
char | 1 バイト |
short | 2 バイト |
int | 4 バイト |
long | 4 バイト |
float | 4 バイト |
double | 8 バイト |
long double | 16 バイト 注: AIX® および Linux PPC の場合、long double は 8 バイトです。 |
pointer | 4 バイト |
ptrdiff_t | 4 バイト |
size_t | 4 バイト |
time_t | 4 バイト |
clock_t | 4 バイト |
wchar_t | 4 バイト 注: AIX の場合、wchar_t は 2 バイトです。 |
64 ビットの UNIX アプリケーション
このセクションは、Solaris を基準にしています。他の UNIX プラットフォームにおける相違点については、注記してあります。
名前 | 長さ |
---|---|
char | 1 バイト |
short | 2 バイト |
int | 4 バイト |
long | 8 バイト |
float | 4 バイト |
double | 8 バイト |
long double | 16 バイト 注: 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 の場合、wchar_t は 2 バイトです。 |
Windows 64 ビット・アプリケーション
名前 | 長さ |
---|---|
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 におけるコーディングの考慮事項
- 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);
16 進数出力を必要とする場合、上位および下位の 4 バイトを別個にプリントする必要があります。printf("My struc pointer: %x", pMyStruc);
- 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 は 4 バイトに定義されます。これは、すべての WebSphere® MQ プラットフォームにおける int と同様です。