标准数据类型

了解 32 位 UNIX, 64 位 UNIX和 64 位 Windows 应用程序上的标准数据类型。

32 位 UNIX 应用程序

包含此部分以进行比较,并基于 Solaris。 注意与其他 UNIX 平台 的任何差异:
名称 长度
字符型 1 个字节
短整型 2 字节
int 4 字节
long 4 字节
浮点值 4 字节
双精度值 8 字节
long double 16 字节

请注意,在 AIX®Linux® PPC 上,长双精度值为 8 字节。

指针 4 字节
ptrdiff_t 4 字节
大小 4 字节
时间 (t) 4 字节
发条 4 字节
wchar_t 4 字节

请注意,在 AIX 上, wchar_t 为 2 字节。

64 位 UNIX 应用程序

此部分基于 Solaris。 注意与其他 UNIX 平台 的任何差异:
名称 长度
字符型 1 个字节
短整型 2 字节
int 4 字节
long 8 字节
浮点值 4 字节
双精度值 8 字节
long double 16 字节

请注意,在 AIXLinux PPC 上,长双精度值为 8 字节。

指针 8 字节
ptrdiff_t 8 字节
大小 8 字节
时间 (t) 8 字节
发条 8 字节

请注意,在其他 UNIX 平台 上,时钟为 4 字节。

wchar_t 4 字节

请注意,在 AIX 上, wchar_t 为 2 字节。

Windows 64 位应用程序

名称 长度
字符型 1 个字节
短整型 2 字节
int 4 字节
long 4 字节
浮点值 4 字节
双精度值 8 字节
long double 8 字节
指针 8 字节

请注意,所有指针都是 8 字节。

ptrdiff_t 8 字节
大小 8 字节
时间 (t) 8 字节
发条 4 字节
wchar_t 2 字节
WORD 2 字节
DWORD 4 字节
句柄 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);
如果需要十六进制输出,那么必须分别打印 4 字节的上限和下限。
char * 指针
适用平台
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 字节类型中; 仅当您处理的是实际 long 数据类型时才使用 %l 。 MQLONG , UINT32 和 INT32 定义为四个字节,与所有 IBM® MQ 平台上的 int 相同: