我正在尝试将C程序移植到具有的SPARC架构 以下类型声明
#include <stdint.h>
typedef uint32_t WORD ;
typedef uint64_t DWORD ;
麻烦的是,编译器告诉我stdint.h无法找到。因此, 我重新定义了这些数据类型如下:
unsigned int WORD;
unsigned long DWORD;
对我而言,这似乎是一个直截了当的声明,但该计划并没有预料到它应该如此。我可能会错过什么吗?
由于
答案 0 :(得分:1)
<stdint.h>
和uint32_t
和uint64_t
类型在ISO / IEC 9899:1999中是“新的”。您的编译器可能只符合标准的先前版本。
如果你确定unsigned int
和unsigned 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