数据类型问题

我正在尝试将C程序移植到具有以下类型声明的SPARC体系结构

#include  typedef uint32_t WORD ; typedef uint64_t DWORD ; 

麻烦的是,编译器告诉我stdint.h无法找到。 因此,我重新定义了这些数据类型如下:

 unsigned int WORD; unsigned long DWORD; 

对我来说,这似乎是一个直截了当的声明,但该计划并没有预料到它应该如此。 我可能会错过什么吗?

谢谢

和类型uint32_tuint64_t在ISO / IEC 9899:1999中是“新的”。 您的编译器可能只符合以前版本的标准。

如果你确定unsigned intunsigned long分别是32位和64位那么你应该没有任何问题(至少不是由于typedef本身的问题)。 像你一样,情况可能并非如此。 你知道(或者你能发现)你的编译器是否支持unsigned long long吗?

我猜测unsigned int可能是32位,你的SPARC多大了?

如果您的编译器/操作系统没有那么最好的办法是实现您自己的此标头版本,而不是修改您尝试移植的代码。 您可能只需要通常在定义的类型的子集,例如

 // // stdint.h // typedef int int32_t; // signed 32 bit int typedef unsigned long long uint64_t; // unsigned 64 bit int 

(显然,您需要知道特定平台上各种整数类型的大小才能正确执行此操作)。

所以,你需要一个32位的整数和另一个64位的整数。

可能是你的架构上的int和long是相同的,如果你的编译器支持long long,那么可能是64位而int可能是32位。 检查编译器文档中它支持的内容,以及它是否有任何扩展(例如,某些编译器可能提供__int64类型)。 这可能是你需要的:

  typedef unsigned int WORD; typedef unsigned long long DWORD; 

无论如何,我会写一个小程序来validation主机上整数的大小,所以你可以选择正确的一个,即printf sizeof(int),sizeof(long)等等。 (在sparc主机上,CHAR_BIT将为8,所以它至少是8位的多个。)

此外,由于您正在移植到sparc主机,因此请确保您的代码不会在有关endianess的地方搞乱