標準データ型

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); 
以下は使用しないでください。
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 は 4 バイトに定義されます。これは、すべての WebSphere® MQ プラットフォームにおける int と同様です。


資料 資料

フィードバック

タイム・スタンプ・アイコン 最終更新: 2018 年 10 月 2 日 (火)
http://www.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.ref.dev.doc/com.ibm.mq.ref.dev.doc/q104610_.htm fg19390_