数据类型问题

时间:2011-01-06 12:05:19

标签: c types

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

#include <stdint.h>

typedef uint32_t  WORD ;
typedef uint64_t DWORD ; 

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

unsigned int  WORD; 
unsigned long DWORD;

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

由于

3 个答案:

答案 0 :(得分:1)

<stdint.h>uint32_tuint64_t类型在ISO / IEC 9899:1999中是“新的”。您的编译器可能只符合标准的先前版本。

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

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

答案 1 :(得分:0)

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

//
// stdint.h
//

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

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

答案 2 :(得分:0)

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

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

  typedef unsigned int  WORD; 
  typedef unsigned long long DWORD;

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

此外,由于您要移植到sparc主机,请确保您的代码没有弄乱endianess