2011-01-06 105 views
1

我試圖端口一個C程序到具有 以下類型聲明數據類型的問題

#include <stdint.h> 

typedef uint32_t WORD ; 
typedef uint64_t DWORD ; 

麻煩的是SPARC架構,編譯器告訴我,stdint.h不能被發現。因此, 我重新定義數據類型的那些如下:

unsigned int WORD; 
unsigned long DWORD; 

這似乎對我的簡單聲明,但該程序並不期望,因爲它應該。我可能錯過了什麼?

感謝

回答

1

<stdint.h>和類型uint32_tuint64_t是ISO/IEC的 「新」 9899:1999。您的編譯器可能只符合標準的以前版本。

如果您確定unsigned intunsigned long分別是32位和64位,那麼您不應該有任何問題(至少不是由於typedefs本身)。就你而言,情況可能並非如此。你知道嗎(或者你能找到答案),如果你的編譯器支持unsigned long long

我猜unsigned int大概是32位的,多大是你的SPARC?

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 

(顯然,您需要知道特定平臺上的各種整數類型的大小才能正確執行此操作)。

0

所以,你需要一個整數,是32位的,另一個是64位。

這可能是int和多頭都在你的架構是相同的,如果你的編譯器支持很長很長,這可能是64位,而INT可能是32位。檢查編譯器文檔是否支持它,以及它是否有擴展名(例如,某些編譯器可能提供__int64類型)。這可能是你所需要的:

typedef unsigned int WORD; 
    typedef unsigned long long DWORD; 

無論如何,我會寫一個小程序來驗證您的主機上整數的大小,這樣你就可以選擇正確的一個,那就是在printf的sizeof(INT) sizeof(長)等等。 (適用於SPARC主機CHAR_BIT將是8,所以它的所有ATLEAST 8的multple位。)

而且,由於你移植到SPARC主機,請確保您的代碼不會搞亂某處關於endianess